earthjasonlin
|
44d8ed4f75
|
feat(ui): replace language dropdown with globe icon and expandable menu
|
2026-07-07 09:54:57 +08:00 |
|
earthjasonlin
|
ca9b3cc8dc
|
refactor(i18n): move translations to JSON files under app/locales, dynamic language switch
|
2026-07-07 09:46:50 +08:00 |
|
earthjasonlin
|
969d8a1b18
|
fix(api-docs): replace all hardcoded Chinese with i18n translation keys for English support
|
2026-07-07 09:33:01 +08:00 |
|
earthjasonlin
|
504eef819e
|
fix(api-docs): remove inline-block override on settings link button for proper text centering
|
2026-07-07 09:28:58 +08:00 |
|
earthjasonlin
|
5c1e89290d
|
feat(api): add public RESTful API with API key auth and documentation page
|
2026-07-07 09:22:11 +08:00 |
|
earthjasonlin
|
69a2ab3e7e
|
fix(postcards): remove card number format restriction and forced uppercase
|
2026-07-06 23:14:12 +08:00 |
|
earthjasonlin
|
7e99ce9f08
|
feat(i18n): add English localization with per-user language preference
|
2026-07-06 22:41:09 +08:00 |
|
earthjasonlin
|
261d53b91f
|
fix(dashboard): extract labels/data from tuple list for Chart.js
|
2026-07-06 22:13:46 +08:00 |
|
earthjasonlin
|
4c9c6f6e05
|
feat(i18n): add English localization with per-user language preference and navbar toggle
|
2026-07-06 22:07:05 +08:00 |
|
earthjasonlin
|
e178b93d69
|
fix(detail): prevent dt labels from wrapping, allow dd values to wrap
|
2026-07-06 21:13:37 +08:00 |
|
earthjasonlin
|
4cd2a2c38c
|
fix(postcards): move notes to right side before action buttons in list, use dl grid format in detail page
|
2026-07-06 21:13:01 +08:00 |
|
earthjasonlin
|
e875e90161
|
style: set CJK+English fonts, reduce base font size to 14px, lighten text colors
|
2026-07-06 21:10:59 +08:00 |
|
earthjasonlin
|
da7ebe45ed
|
feat(postcards): add notes field to postcards with edit, detail, and truncated list display
|
2026-07-06 21:07:28 +08:00 |
|
earthjasonlin
|
1a6424ebce
|
feat(dashboard): split country stats into sent/received bar charts side by side
|
2026-07-06 20:41:39 +08:00 |
|
earthjasonlin
|
b3f1d07b7c
|
revert(dashboard): restore Chart.js bar chart for country distribution
|
2026-07-06 20:35:43 +08:00 |
|
earthjasonlin
|
18da45240a
|
feat(dashboard): replace Chart.js with pure HTML/CSS bar chart, flags render correctly
|
2026-07-06 20:34:52 +08:00 |
|
earthjasonlin
|
7620d453b7
|
feat(dashboard): add country distribution bar chart using Chart.js
|
2026-07-06 20:20:46 +08:00 |
|
earthjasonlin
|
0f01cc263d
|
feat: auto-trim whitespace from text inputs on form submit globally
|
2026-07-06 20:10:54 +08:00 |
|
earthjasonlin
|
47a9c6a7ad
|
fix(postcards): auto-fill today date on page load for new postcards
|
2026-07-06 20:09:28 +08:00 |
|
earthjasonlin
|
e1e8199375
|
feat(postcards): auto-fill today date on status change, card_number always uppercase
|
2026-07-06 20:06:42 +08:00 |
|
earthjasonlin
|
a62eb4cc58
|
fix(profiles): remove duplicate border, center-align textarea/button; notes read-only on postcards page
|
2026-07-06 19:41:21 +08:00 |
|
earthjasonlin
|
189c3718df
|
feat(profiles): notes shown on postcards page, save stays on current page
|
2026-07-06 19:39:54 +08:00 |
|
earthjasonlin
|
2989837b7d
|
feat(profiles): add private notes field per profile, visible only to owner
|
2026-07-06 19:36:29 +08:00 |
|
earthjasonlin
|
58386e836a
|
fix(admin-invites): badge default bg color, registered users as plain text list
|
2026-07-06 08:43:07 +08:00 |
|
earthjasonlin
|
ef06cd29dc
|
fix(models): resolve ambiguous foreign keys between User and InviteCode
|
2026-07-06 08:39:33 +08:00 |
|
earthjasonlin
|
48da00c8e7
|
feat(admin-invites): show registered usernames per invite code, track invited_by_code_id on User
|
2026-07-06 08:37:49 +08:00 |
|
earthjasonlin
|
46753a7c48
|
fix(admin-invites): left-align create card conditional fields, convert local datetime to UTC on save
|
2026-07-06 08:35:55 +08:00 |
|
earthjasonlin
|
5fdd0d5ed2
|
fix(admin-invites): align create card conditional fields styling with edit card
|
2026-07-06 08:33:56 +08:00 |
|
earthjasonlin
|
5ba89eee4f
|
fix(admin-invites): create form conditional fields inline with nowrap labels, match input styling
|
2026-07-06 08:32:36 +08:00 |
|
earthjasonlin
|
028a4d3a05
|
fix(admin-invites): create form label margin-top:0, edit form inline conditional fields
|
2026-07-06 08:27:34 +08:00 |
|
earthjasonlin
|
202c1804af
|
fix(invites): register strftime Jinja2 filter, fix 500 error on admin invites page
|
2026-07-06 08:24:20 +08:00 |
|
earthjasonlin
|
a34b46b4b1
|
fix(admin-invites): create card uses form-card style, align save/delete with select via align-self flex-end
|
2026-07-06 08:21:54 +08:00 |
|
earthjasonlin
|
623549009e
|
fix(admin-invites): display times in Asia/Shanghai (CST) instead of UTC
|
2026-07-06 08:20:14 +08:00 |
|
earthjasonlin
|
7481af6e4d
|
fix(admin-invites): add margin-top to create button, align save/delete buttons bottom with select via invisible label
|
2026-07-06 08:18:51 +08:00 |
|
earthjasonlin
|
e710ce020e
|
fix(admin-invites): increase create form gap, align edit buttons bottom with select
|
2026-07-06 08:17:00 +08:00 |
|
earthjasonlin
|
65a7c38ca5
|
fix(admin-invites): unify button height/size, fit-content width for create button
|
2026-07-06 08:15:08 +08:00 |
|
earthjasonlin
|
2e0f15def2
|
fix(admin-invites): left-align all fields on mobile
|
2026-07-06 08:13:42 +08:00 |
|
earthjasonlin
|
9fbe5ce85f
|
fix(admin-invites): left-align create button
|
2026-07-06 08:12:57 +08:00 |
|
earthjasonlin
|
e77319da50
|
fix(admin-invites): stack create form fields vertically, unify row height and spacing
|
2026-07-06 08:12:25 +08:00 |
|
earthjasonlin
|
3287dae370
|
fix(admin-invites): unify form field styles, fix mobile layout for create and edit forms
|
2026-07-06 08:10:36 +08:00 |
|
earthjasonlin
|
2c0725b242
|
feat(invite): add invite code registration system
|
2026-07-06 01:13:07 +08:00 |
|
earthjasonlin
|
a769ce7546
|
chore: rename app to 星笺 (Mailova)
|
2026-07-06 00:41:24 +08:00 |
|
earthjasonlin
|
d8378e0acc
|
feat(showcase): sort postcards by time descending
|
2026-07-06 00:27:39 +08:00 |
|
earthjasonlin
|
630772ae4b
|
feat(showcase): lightbox, checkbox per-card toggle, lazyload, fix toggle Y-align, remove navbar on public page
|
2026-07-06 00:24:03 +08:00 |
|
earthjasonlin
|
185b743e05
|
fix(settings): use Query alias for tab param, fix showcase tab persistence
|
2026-07-06 00:10:30 +08:00 |
|
earthjasonlin
|
d082a4b421
|
fix(showcase): tab stay, Y-center toggle, group postcards by sent/received, hide navbar on public page, remove profiles/xx/showcase
|
2026-07-06 00:05:15 +08:00 |
|
earthjasonlin
|
a69c6c10c9
|
refactor(ui): merge showcase settings into settings page tab, fix profile showcase GET route, fix layout
|
2026-07-05 23:56:28 +08:00 |
|
earthjasonlin
|
9f4f57b80a
|
feat(showcase): add public showcase page with per-profile/per-postcard visibility controls
|
2026-07-05 23:45:23 +08:00 |
|
earthjasonlin
|
2f770a3185
|
feat(models): add showcase fields to User, Profile, Postcard
|
2026-07-05 23:35:45 +08:00 |
|
earthjasonlin
|
8df3b30f55
|
fix(auth): set session expires_at to non-nullable with 1 year max
|
2026-07-05 23:21:54 +08:00 |
|