Vi o título e a primeira coisa que passou na minha mente foi uma gambiarra que encontrei num sistema legado que dei manutenção certa vez:
Um campo string com os ids de cada um dos "cards", separados por vírgula.
Quando o "frontend" arrastava um dos cards para determinada posição, a string com a nova posição do card era atualizada. E essa string (que era armazenada num arquivo texto) poderia ser facilmente armazenada num campo texto de alguma tabela.
A complexidade foi levada para a view, etc, mas também é uma solução. rsrs