Add accounts expansion, analytics, exchange rates, API tokens, PWA support, and UI overhaul
All checks were successful
Deploy to VPS / deploy (push) Successful in 45s

- Expand Account model with account_type (pension, savings, liability, crypto), new banks/currencies (BTC, XMR, FCL, ROP, VOL, MEMP, MPAT, MORTGAGE), and next_payment field
- Add exchange rate endpoint (BCCR integration), analytics endpoint, paste-import for transactions, and API token management
- Add PWA manifest, service worker, and app icons
- Redesign dashboard, transactions, transfers, and login pages with theme support
- Add billing cycle selector, confirm dialog, and paste import modal components
- One-time DB reset in deploy workflow for schema migration

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Carlos Escalante
2026-03-21 18:23:47 -06:00
parent 1257b0dd61
commit 0a8e00e227
39 changed files with 2247 additions and 220 deletions

View File

@@ -1,5 +1,41 @@
@import 'tailwindcss';
@custom-variant dark (&:where(.dark, .dark *));
@theme {
--color-surface: #FFFDF5;
--color-surface-secondary: #fefae0;
--color-surface-card: rgba(96, 108, 56, 0.08);
--color-surface-hover: rgba(96, 108, 56, 0.12);
--color-border: rgba(96, 108, 56, 0.25);
--color-border-subtle: rgba(96, 108, 56, 0.15);
--color-text-primary: #283618;
--color-text-secondary: #606C38;
--color-text-muted: #8a9462;
--color-text-faint: #c2c9a7;
--color-input-bg: #f5f1d0;
}
.dark {
--color-surface: #020617;
--color-surface-secondary: #0f172a;
--color-surface-card: rgba(15, 23, 42, 0.6);
--color-surface-hover: rgba(30, 41, 59, 0.3);
--color-border: rgba(30, 41, 59, 0.6);
--color-border-subtle: rgba(30, 41, 59, 0.4);
--color-text-primary: #ffffff;
--color-text-secondary: #94a3b8;
--color-text-muted: #64748b;
--color-text-faint: #334155;
--color-input-bg: rgba(15, 23, 42, 0.8);
}
body {
background-color: var(--color-surface);
color: var(--color-text-primary);
transition: background-color 0.2s, color 0.2s;
}
@keyframes fade-in {
from { opacity: 0; transform: translateY(8px); }
to { opacity: 1; transform: translateY(0); }