16 Commits

Author SHA1 Message Date
ad6f2b2ff2 refactor(model): rename Postcard.country -> country_to for clear semantics - country_from: origin country (where postcard was sent from) - country_to: destination country (where postcard was sent to) - Profile.country remains as user's home country - Updated all routes, schemas, templates, and API endpoints 2026-07-07 13:43:39 +08:00
a071b3dde4 feat(postcard): profile country, country_from, per-user card number uniqueness, public page overhaul - Profile: add country field for default origin country - Postcard: add country_from field, auto-fill from profile.country on create - card_number uniqueness: change from global to per-user (profile_id + card_number) - Public pages: remove card_number display, only show cards with image_front - Public pages: show country as from→to format - Index page: no time display, add register button, fix lightbox with prev/next - Infinite scroll: add /api/public/cards endpoints and IntersectionObserver - Internal pages: update postcards list/detail for country_from display - i18n: add profiles.country_ph, pc_form.country_from, pc_detail.route 2026-07-07 12:32:24 +08:00
137304090a chore: stage changes before history rewrite 2026-07-07 11:28:18 +08:00
6a49fedfbb feat(api): add public RESTful API with API key auth and documentation page 2026-07-07 09:22:11 +08:00
f448a900f5 feat(i18n): add English localization with per-user language preference and navbar toggle 2026-07-06 22:07:05 +08:00
68c88a7910 feat(postcards): add notes field to postcards with edit, detail, and truncated list display 2026-07-06 21:07:28 +08:00
b6d43b3db4 feat(profiles): add private notes field per profile, visible only to owner 2026-07-06 19:36:29 +08:00
501e27400b fix(models): resolve ambiguous foreign keys between User and InviteCode 2026-07-06 08:39:33 +08:00
755409f386 feat(admin-invites): show registered usernames per invite code, track invited_by_code_id on User 2026-07-06 08:37:49 +08:00
b58956937e feat(invite): add invite code registration system 2026-07-06 01:13:07 +08:00
b412f5001e feat(models): add showcase fields to User, Profile, Postcard 2026-07-05 23:35:45 +08:00
46670c72fa fix(auth): set session expires_at to non-nullable with 1 year max 2026-07-05 23:21:54 +08:00
ae2ed2d961 feat: add user settings page (change username/password) and remove public registration 2026-07-05 22:01:24 +08:00
9692ff8ade feat(auth): add remember me option with persistent DB sessions 2026-07-05 21:28:58 +08:00
2bd914532e feat: always display country code in uppercase (model validates + oninput) 2026-07-05 21:22:57 +08:00
0eca60300f feat: initial postcard manager - FastAPI + Jinja2 + SQLite 2026-07-05 16:06:03 +08:00