design/rulings-2026-09-19
.amadan/ci
+6 −0
.amadan/ciLoading diff…
.amadan/ci.d/10-vet
+2 −0
.amadan/ci.d/10-vetLoading diff…
.amadan/ci.d/20-fmt
+2 −0
.amadan/ci.d/20-fmtLoading diff…
.amadan/ci.d/30-test
+2 −0
.amadan/ci.d/30-testLoading diff…
.amadan/ci.d/40-migration-check
+2 −0
.amadan/ci.d/40-migration-checkLoading diff…
.gitignore
+8 −0
.gitignoreLoading diff…
AGENTS.md
+87 −0
AGENTS.mdLoading diff…
CLAUDE.md
+5 −0
CLAUDE.mdLoading diff…
Makefile
+124 −0
MakefileLoading diff…
README.md
+122 −0
README.mdLoading diff…
cmd/fichas/main.go
+87 −0
cmd/fichas/main.goLoading diff…
docs/mockups/card-layout.html
+79 −0
docs/mockups/card-layout.htmlLoading diff…
docs/mockups/cards.html
+108 −0
docs/mockups/cards.htmlLoading diff…
docs/mockups/database.html
+127 −0
docs/mockups/database.htmlLoading diff…
docs/mockups/edit.html
+83 −0
docs/mockups/edit.htmlLoading diff…
docs/mockups/field.html
+60 −0
docs/mockups/field.htmlLoading diff…
docs/mockups/index.html
+78 −0
docs/mockups/index.htmlLoading diff…
docs/mockups/proposed.css
+230 −0
docs/mockups/proposed.cssLoading diff…
docs/mockups/show.html
+114 −0
docs/mockups/show.htmlLoading diff…
docs/mockups/src/_shared.html
+36 −0
docs/mockups/src/_shared.htmlLoading diff…
docs/mockups/src/card-layout.html
+34 −0
docs/mockups/src/card-layout.htmlLoading diff…
docs/mockups/src/cards.html
+26 −0
docs/mockups/src/cards.htmlLoading diff…
docs/mockups/src/database.html
+36 −0
docs/mockups/src/database.htmlLoading diff…
docs/mockups/src/edit.html
+25 −0
docs/mockups/src/edit.htmlLoading diff…
docs/mockups/src/field.html
+21 −0
docs/mockups/src/field.htmlLoading diff…
docs/mockups/src/index.html
+24 −0
docs/mockups/src/index.htmlLoading diff…
docs/mockups/src/show.html
+56 −0
docs/mockups/src/show.htmlLoading diff…
docs/superpowers/specs/2026-09-19-fichas-design.md
+280 −24
docs/superpowers/specs/2026-09-19-fichas-design.mdLoading diff…
go.mod
+42 −0
go.modLoading diff…
go.sum
+101 −0
go.sumLoading diff…
internal/fichas/app.go
+153 −0
internal/fichas/app.goLoading diff…
internal/fichas/auth.go
+197 −0
internal/fichas/auth.goLoading diff…
internal/fichas/auth_navigation.go
+120 −0
internal/fichas/auth_navigation.goLoading diff…
internal/fichas/auth_navigation_test.go
+122 −0
internal/fichas/auth_navigation_test.goLoading diff…
internal/fichas/catalogue.go
+372 −0
internal/fichas/catalogue.goLoading diff…
internal/fichas/catalogue_test.go
+218 −0
internal/fichas/catalogue_test.goLoading diff…
internal/fichas/config.go
+238 −0
internal/fichas/config.goLoading diff…
internal/fichas/config_test.go
+235 −0
internal/fichas/config_test.goLoading diff…
internal/fichas/handlers.go
+598 −0
internal/fichas/handlers.goLoading diff…
internal/fichas/handlers_schema.go
+253 −0
internal/fichas/handlers_schema.goLoading diff…
internal/fichas/icons/icons.go
+53 −0
internal/fichas/icons/icons.goLoading diff…
internal/fichas/index.go
+565 −0
internal/fichas/index.goLoading diff…
internal/fichas/index_test.go
+263 −0
internal/fichas/index_test.goLoading diff…
internal/fichas/list.go
+262 −0
internal/fichas/list.goLoading diff…
internal/fichas/migrations.go
+54 −0
internal/fichas/migrations.goLoading diff…
internal/fichas/migrations/0001_init.sql
+68 −0
internal/fichas/migrations/0001_init.sqlLoading diff…
internal/fichas/migrations/0002_immutable_entries.sql
+43 −0
internal/fichas/migrations/0002_immutable_entries.sqlLoading diff…
internal/fichas/migrations/0003_alter_card_types.sql
+4 −0
internal/fichas/migrations/0003_alter_card_types.sqlLoading diff…
internal/fichas/migrations/schema.sql
+96 −0
internal/fichas/migrations/schema.sqlLoading diff…
internal/fichas/models.go
+355 −0
internal/fichas/models.goLoading diff…
internal/fichas/models_test.go
+138 −0
internal/fichas/models_test.goLoading diff…
internal/fichas/print.go
+86 −0
internal/fichas/print.goLoading diff…
internal/fichas/print_test.go
+76 −0
internal/fichas/print_test.goLoading diff…
internal/fichas/read.go
+488 −0
internal/fichas/read.goLoading diff…
internal/fichas/render.go
+203 −0
internal/fichas/render.goLoading diff…
internal/fichas/schema.go
+445 −0
internal/fichas/schema.goLoading diff…
internal/fichas/schema_test.go
+185 −0
internal/fichas/schema_test.goLoading diff…
internal/fichas/seal/bench_test.go
+47 −0
internal/fichas/seal/bench_test.goLoading diff…
internal/fichas/seal/seal.go
+212 −0
internal/fichas/seal/seal.goLoading diff…
internal/fichas/seal/seal_test.go
+128 −0
internal/fichas/seal/seal_test.goLoading diff…
internal/fichas/seal/vectors_test.go
+72 −0
internal/fichas/seal/vectors_test.goLoading diff…
internal/fichas/static/brand/LICENSE.lucide
+43 −0
internal/fichas/static/brand/LICENSE.lucideLoading diff…
internal/fichas/static/brand/apple-touch-icon.png
binary
internal/fichas/static/brand/apple-touch-icon.pngLoading diff…
internal/fichas/static/brand/brand.css
+19 −0
internal/fichas/static/brand/brand.cssLoading diff…
internal/fichas/static/brand/icon-32.png
binary
internal/fichas/static/brand/icon-32.pngLoading diff…
internal/fichas/static/brand/icon.svg
+1 −0
internal/fichas/static/brand/icon.svgLoading diff…
internal/fichas/static/busy.css
+47 −0
internal/fichas/static/busy.cssLoading diff…
internal/fichas/static/busy.js
+252 −0
internal/fichas/static/busy.jsLoading diff…
internal/fichas/static/chrome.css
+292 −0
internal/fichas/static/chrome.cssLoading diff…
internal/fichas/static/chrome.js
+82 −0
internal/fichas/static/chrome.jsLoading diff…
internal/fichas/static/datetime.js
+1698 −0
internal/fichas/static/datetime.jsLoading diff…
internal/fichas/static/fichas.css
+245 −0
internal/fichas/static/fichas.cssLoading diff…
internal/fichas/static/live.js
+114 −0
internal/fichas/static/live.jsLoading diff…
internal/fichas/static/menu.css
+147 −0
internal/fichas/static/menu.cssLoading diff…
internal/fichas/static/rastrillo.js
+211 −0
internal/fichas/static/rastrillo.jsLoading diff…
internal/fichas/static/select.js
+280 −0
internal/fichas/static/select.jsLoading diff…
internal/fichas/static/shortcuts.js
+40 −0
internal/fichas/static/shortcuts.jsLoading diff…
internal/fichas/static/sky.css
+76 −0
internal/fichas/static/sky.cssLoading diff…
internal/fichas/static/theme.css
+99 −0
internal/fichas/static/theme.cssLoading diff…
internal/fichas/static/tokens.css
+1961 −0
internal/fichas/static/tokens.cssLoading diff…
internal/fichas/store.go
+445 −0
internal/fichas/store.goLoading diff…
internal/fichas/store_test.go
+364 −0
internal/fichas/store_test.goLoading diff…
internal/fichas/templates/card_delete.html
+18 −0
internal/fichas/templates/card_delete.htmlLoading diff…
internal/fichas/templates/card_edit.html
+17 −0
internal/fichas/templates/card_edit.htmlLoading diff…
internal/fichas/templates/card_layout.html
+35 −0
internal/fichas/templates/card_layout.htmlLoading diff…
internal/fichas/templates/card_new.html
+12 −0
internal/fichas/templates/card_new.htmlLoading diff…
internal/fichas/templates/card_show.html
+49 −0
internal/fichas/templates/card_show.htmlLoading diff…
internal/fichas/templates/errors.html
+9 −0
internal/fichas/templates/errors.htmlLoading diff…
internal/fichas/templates/field_edit.html
+18 −0
internal/fichas/templates/field_edit.htmlLoading diff…
internal/fichas/templates/field_new.html
+24 −0
internal/fichas/templates/field_new.htmlLoading diff…
internal/fichas/templates/fields.html
+27 −0
internal/fichas/templates/fields.htmlLoading diff…
internal/fichas/templates/index.html
+83 −0
internal/fichas/templates/index.htmlLoading diff…
internal/fichas/templates/layout.html
+33 −0
internal/fichas/templates/layout.htmlLoading diff…
internal/fichas/templates/partials.html
+25 −0
internal/fichas/templates/partials.htmlLoading diff…
internal/fichas/templates/shell.html
+53 −0
internal/fichas/templates/shell.htmlLoading diff…
internal/fichas/templates/signin.html
+27 −0
internal/fichas/templates/signin.htmlLoading diff…
internal/fichas/templates/type_new.html
+12 −0
internal/fichas/templates/type_new.htmlLoading diff…
internal/fichas/urls.go
+97 −0
internal/fichas/urls.goLoading diff…
internal/fichas/urls_test.go
+122 −0
internal/fichas/urls_test.goLoading diff…
internal/fichastest/account_test.go
+138 −0
internal/fichastest/account_test.goLoading diff…
internal/fichastest/browser_test.go
+339 −0
internal/fichastest/browser_test.goLoading diff…
internal/fichastest/designer_test.go
+141 −0
internal/fichastest/designer_test.goLoading diff…
internal/fichastest/fontlink_test.go
+24 −0
internal/fichastest/fontlink_test.goLoading diff…
internal/fichastest/gates_test.go
+143 −0
internal/fichastest/gates_test.goLoading diff…
internal/fichastest/harness_test.go
+114 −0
internal/fichastest/harness_test.goLoading diff…
internal/fichastest/index_test.go
+77 −0
internal/fichastest/index_test.goLoading diff…
internal/fichastest/markup_test.go
+87 −0
internal/fichastest/markup_test.goLoading diff…
internal/fichastest/rastrillo_path_test.go
+111 −0
internal/fichastest/rastrillo_path_test.goLoading diff…
internal/fichastest/signin_flow_test.go
+218 −0
internal/fichastest/signin_flow_test.goLoading diff…
internal/fichastest/signin_test.go
+220 −0
internal/fichastest/signin_test.goLoading diff…
internal/fichastest/surface_test.go
+268 −0
internal/fichastest/surface_test.goLoading diff…
internal/fichastest/vendored_test.go
+163 −0
internal/fichastest/vendored_test.goLoading diff…
scripts/mockups/main.go
+206 −0
scripts/mockups/main.goLoading diff…
scripts/preview/main.go
+130 −0
scripts/preview/main.goLoading diff…
scripts/writeestilo/main.go
+39 −0
scripts/writeestilo/main.goLoading diff…