Skip to content

Releases: bestnite/engram

v0.2.1

Choose a tag to compare

@github-actions github-actions released this 28 Oct 21:03
v0.2.1
862212a

Changelog

Features

  • 862212a feat(frontend): show deck progress as an aligned table and bar
  • 14492a1 feat(home): give each deck a stats line with badges and a progress bar
  • b30e345 feat: pause a deck for oneself (M15-1)
  • 46edf2f feat: show studied and remaining cards per deck

Bug fixes

  • e98a432 fix(web): return empty arrays instead of null for empty lists

Refactors

  • f5439df refactor(frontend): drop exports nothing imports
  • 6fe4384 refactor(frontend): remove catalog keys no view reads
  • 348cd9c refactor(i18n): drop server catalog keys no Go code reads
  • c117c92 refactor: drop parameters and results no caller uses
  • ee879c5 refactor: drop struct fields that are written but never read
  • 218aa74 refactor: remove production code that only its own tests reached
  • 4463931 refactor: remove unreachable functions, helpers and fields

Other changes

  • 88f78d8 refactor!: drop the deck archived_at column

v0.2.0

Choose a tag to compare

@github-actions github-actions released this 26 Oct 12:07
v0.2.0
bb1c8c4

Compatibility with v0.1.10

This release is not machine-compatible with v0.1.10.

  • Seven REST routes removed, none added or renamed: GET /s/:token,
    GET /api/v1/share/:token, POST /api/v1/share/:token/unlock,
    POST /api/v1/share/:token/join, POST /api/v1/decks/:id/sharing/links,
    DELETE /api/v1/decks/:id/sharing/links and
    DELETE /api/v1/decks/:id/sharing/links/revoke/:digest. Stored share links stop working.
    deck_grants, share_invites, the sharing page and the grant endpoints remain.
  • Two tables dropped: migration 0008_drop_share_link_tables removes share_links and
    share_session_decks. Migration 0009_unique_default_preset_names renames duplicate
    Default presets and changes no table, column or index; every decks.preset_id and
    deck_member_settings.preset_id reference stays in place.
  • No MCP tool was removed or renamed. delete_deck is new; get_due_cards keeps its name
    and its arguments.
  • A single newline inside a paragraph now renders <br>. Card content and mail templates
    follow GitHub Flavored Markdown, so tables, strikethrough, bare-URL links and task lists
    render too. Content with no single newline and no GFM syntax renders as before.
  • POST /api/v1/keys rejects an expires_at that is not strictly in the future with
    400 invalid_request, where it previously returned a key that was already unusable. Omitting
    the field, or sending a future time, behaves as before.
  • From-source builds need Go 1.27 and Node 26 / npm 12. Published images and binaries are
    unaffected.
  • Additive only: the optional option_order field on due cards and on the
    POST /api/v1/review/render response, and the ruby/rt/rp elements with their named
    data-* attributes in rendered card HTML. No configuration key and no environment variable
    was added, removed or renamed, and the deck-package and note-import schemas keep their shape.

Features

Review

  • Each (user, card, state version) gets a derived option display order, so a choice answer
    cannot be memorised by position; submitting a review produces a new one. The submitted
    answer is still a stored index.
  • Answer controls receive one sanitized HTML fragment per option and typeset it, so TeX
    delimiters no longer appear literally.
  • A cloze deletion whose whole content sits inside a formula separates its accepted answers
    with \alt; validation rejects \alt where it cannot split.
  • The four rating buttons show only their names, and the help popover no longer promises an
    interval under each one.
  • Each checkbox and radio is named through aria-labelledby from the element that shows the
    option, so a typeset formula is announced as its rendered text.
  • The completion text waits for the another-batch quota request, so text and offer form appear
    together.

Card content and rendering

  • Card text accepts {{tts:…}}, {{audio:…}} and {{ruby:…}}; the server expands each into an
    element with named data-* attributes and the review page and editor preview attach speech
    and audio controls to them. An unknown name, a malformed parameter or a body that is not a
    single inline-Markdown paragraph stays literal, and mail bodies render plain text.
  • A shortcode body is inline Markdown, so emphasis, code spans, links and a cloze highlight
    render inside it. Three nesting shapes are accepted, at most two shortcode levels deep:
    tts around ruby, tts around a cloze highlight, and tts around ruby around a cloze
    highlight. Speech reads the visible text only; mail flattens tts around ruby to
    base(reading).
  • Audio gets a seekable progress track with an elapsed/total clock, pause/resume from the paused
    position and five-second back/forward buttons; the tts hide flag hides the body only while
    a speech control exists. Both controls fit inside their line box with a 40×40 pointer target.
  • /help/shortcodes documents the grammar, parameters and fallback rules in both languages;
    each editor text field carries its own image and shortcode tools, with the media library and
    composer in dialogs.
  • Card content and mail templates render GitHub Flavored Markdown: tables, strikethrough,
    bare-URL autolinks and task lists with read-only checkboxes.

Authoring

  • Insertion tools sit on the field they write into; below lg the live preview is an on-demand
    drawer. The page-level field selector, upload area and standalone composer block are gone.
  • Each text field carries bold, italic and strikethrough buttons plus Ctrl/Cmd+B, Ctrl/Cmd+I
    and Ctrl/Cmd+Shift+X. The stored value stays Markdown source.

Accounts, keys and access

  • The SPA login page links to /register when the anonymous policy probe reports open.
  • The personal key page sets an expiry on create — never, 7 / 30 / 90 days, one year, or a
    custom date meaning the end of that local day — lists each key's expiry, and groups
    already-expired keys separately with an expired badge while keeping the revoke action.

Notifications and mail

  • Saving notification preferences sends only closable mail types, so the locked class-A entries
    the form keeps for rendering no longer fail every request with class_locked.
  • Class-D admin notifications carry RFC 8058 one-click unsubscribe headers.
  • The built-in body of every mail type is designed Markdown rendered through the same pipeline
    as an admin template: a title, a primary action, a note and a footer, a derived plain-text
    part, and a shell that survives clients without rounded corners or <style>. All thirteen
    types were rewritten in both languages.
  • The toast close button follows the page theme, including a live switch.

Data, imports and MCP

  • Importing a package derives the preset name from the deck when the package carries no name or
    the reserved Default, and makes it unique among the importer's presets, so an import can no
    longer add a preset named Default.
  • delete_deck removes a deck together with its notes, cards and progress. Only the owner may
    call it, and the deletion is irreversible; it calls the same service method as
    DELETE /api/v1/decks/:id and returns the same body.

Full changelog: v0.1.10...v0.2.0

Container images: nite07/engram:v0.2.0 (Docker Hub) and ghcr.io/bestnite/engram:v0.2.0.

v0.1.10

Choose a tag to compare

@github-actions github-actions released this 20 Oct 12:26
3325038

Changelog

  • 64cc8d9 feat(frontend): explain metrics with help popovers
  • 3118f83 feat(frontend): move cloze syntax help from the field label into a popover
  • 3eef09f feat(frontend): move long field explanations into help popovers
  • cb0f9df feat: allow another batch of new cards after the daily goal
  • ad1c936 feat: show next intervals and rating guidance on review buttons
  • 13bdc63 fix(frontend): submit multi-choice answer indexes as numbers
  • ad571a3 fix(stats): use true retention for every retention metric
  • cbf3213 fix(web): warn when a reverse proxy's forwarded client IP is ignored
  • 3325038 merge: docs/architecture (move the architecture description into ARCHITECTURE.md)
  • 9a53d34 merge: feat/cloze-help (move cloze syntax help into a popover)
  • 0b59bd5 merge: feat/extra-new-cards (another batch of new cards after the daily goal)
  • 64565a0 merge: feat/inline-help-tips (move long field explanations into help popovers)
  • f7e6508 merge: feat/metric-help (true retention everywhere; help popovers for metrics)
  • 73d2274 merge: feat/rating-guidance (next intervals and rating help on review buttons)
  • 6636e99 merge: fix/choice-multi-answers (submit multi-choice answer indexes as numbers)
  • 8551e86 merge: fix/proxy-client-ip (warn when a reverse proxy's forwarded client IP is ignored)

v0.1.9

Choose a tag to compare

@github-actions github-actions released this 10 Oct 12:13
3298a88

Changelog

  • 640884b docs(decks): publish the deck library with four importable packages
  • 8e84474 docs(readme): refresh the README screenshots against the current SPA
  • f5a0918 docs(web): note that a cloze inside a formula is boxed, not styled by .cloze
  • ea32f1f feat(api,mcp): import deck packages through single-use upload URLs
  • bf1b2c8 feat(cardtype): accept several answers per cloze blank
  • b8fe760 feat(cardtype): grade cloze cards from typed answers
  • 782d5a2 feat(cardtype): grade list cards item by item
  • 4fed8bf feat(cardtype): ship a validated example note with every card type
  • 82cbf76 feat(cardtype): show a typed card's accepted answers on one line
  • 4ffd38f feat(cardtype): write a short answer before comparing it to the reference
  • 6769bee feat(frontend): keep the prompt visible after revealing or grading an answer
  • 3a6d0fc feat(mcp): add list_card_types so agents can discover note fields
  • 27fcdbb feat(package): make FSRS weights opt-in on deck package export and import
  • 48e0b24 feat(review): scope the review queue to tags within one deck
  • 6ad6264 feat(web): review the selected decks from the deck-list selection bar
  • 5f3ea55 feat(web): study a deck by tag from the deck detail page
  • 9f62944 fix(cardtype): box a cloze inside a formula instead of using \class
  • c10823b fix(cardtype): highlight a cloze inside a formula with MathJax \class
  • 5f29ef3 fix(cardtype): recognise a cloze deletion that follows a single brace
  • 614ea43 fix(frontend): drop the doubled rule above a revealed answer
  • 72c4497 fix(frontend): keep inline formulas on the text line
  • db57c47 fix(frontend): keep number inputs bound to strings
  • 1b77ffa fix(frontend): offer package options when batch-exporting decks
  • de48e0a fix(frontend): toast the package import result
  • d8a3a2e fix(frontend): toggle a multiple-choice option by clicking its row
  • ddecdb5 fix(frontend): translate the preset form error message
  • 08c2bca fix(review): stop repeating choice options in the review front
  • 66e99e3 fix(web): read media from the media root when exporting deck packages
  • 4daebfe fix: default the learn-ahead window to off
  • d6741a2 merge: docs/cloze-css-comment (correct the .cloze style comment)
  • 2eae483 merge: feat/card-type-examples (validated example note per card type)
  • 4abf2ca merge: feat/cloze-alternatives (accept several answers per cloze blank)
  • f64d54a merge: feat/cloze-typed-answer (grade cloze cards from typed answers)
  • ebb82ec merge: feat/deck-tag-review (study a deck by tag)
  • f645a13 merge: feat/decks-batch-review (review the selected decks from the deck-list selection bar)
  • 795e792 merge: feat/graded-keep-prompt (keep the prompt after grading; typed alternatives on one line)
  • 67f9cc9 merge: feat/import-upload (import deck packages through single-use upload URLs)
  • e8262c1 merge: feat/list-card-types (list_card_types MCP tool)
  • 4babf9f merge: feat/list-typed-answer (grade list cards item by item)
  • 4084166 merge: feat/package-weights (make FSRS weights opt-in on package export and import)
  • 9fbe94a merge: feat/short-answer-write-first (write a short answer before comparing it to the reference)
  • 9ae251b merge: fix/batch-export-options (package options for batch deck export)
  • 4fbc1bb merge: fix/choice-options-twice (stop repeating choice options in the review front)
  • ad09baf merge: fix/cloze-math (cloze after a TeX brace; cloze highlight inside formulas)
  • bb9ff26 merge: fix/cloze-math-boxed (box cloze inside formulas; \class needs an unbundled MathJax extension)
  • 0c3443a merge: fix/import-toast (toast the package import result)
  • 3298a88 merge: fix/inline-math-display (keep inline formulas on the text line)
  • 9fa9f7f merge: fix/learn-ahead-default-zero (default the learn-ahead window to off)
  • 0b40e2b merge: fix/multi-choice-row-click (toggle a multiple-choice option by clicking its row)
  • 30f48e7 merge: fix/num-input-bind (keep number inputs bound to strings)
  • ce4515a merge: fix/preset-form-error-i18n (translate the preset form error message)
  • f0dbfe3 merge: fix/revealed-answer-double-rule (drop the doubled rule above a revealed answer)
  • 065c52b merge: fix/web-export-media-root (inline media in web deck package exports)
  • 91f5db1 merge: refactor/request-feedback (unify request feedback on toasts and button spinners)
  • dfbc81e merge: refactor/web-drop-scheduler-for (remove the unused web schedulerFor helper)
  • 12105f3 refactor(frontend): unify request feedback on toasts and button spinners
  • 65c3516 refactor(web): remove the unused schedulerFor helper

v0.1.8

Choose a tag to compare

@github-actions github-actions released this 09 Oct 19:56
6c41d42

Changelog

  • c61e430 feat(export): name downloaded deck packages after the deck title
  • cda2579 feat(frontend): adopt semantic design tokens and overlay motion
  • b6ebde6 feat(frontend): drop the admin overview page
  • 07f53b7 feat(frontend): edit deck info in place and lay out deck tabs as settings sections
  • 09b8001 feat(frontend): give personal settings a tab bar like the admin panel
  • c28fa97 feat(frontend): redesign the deck notes list as a table
  • 7f6d05b feat(frontend): replace loading text with delayed skeletons
  • d2f02fa feat(frontend): replace native file inputs with a drop zone
  • 7bc3b73 feat(frontend): replace the top bar with a collapsible sidebar shell
  • 3fc6885 feat(frontend): unify deck lists and float bulk actions over the page
  • a15ea8e feat(frontend): unify note creation and editing with live previews
  • 5e00720 feat(import): import deck packages from public HTTPS file links
  • 2572565 feat(settings): regroup settings into general, security, email and API & MCP
  • ca7aaa7 feat(stats): draw the learning curve as a stacked bar chart
  • b563bca fix(frontend): fade the sidebar out when entering the review page
  • 9c9f0f7 fix(frontend): keep numeric note fields as numbers in the editor
  • c86a93d fix(frontend): keep the invite form row aligned and let health span the page
  • 4e5d619 fix(frontend): keep the sidebar deck list in sync with deck and card writes
  • 5b320f3 fix(frontend): show readable mail type names in the template editor
  • 2dd1e7e fix(frontend): submit graded answers with Enter on the review page
  • 6c41d42 merge: feat/ui-shell (sidebar shell, design tokens and card-free page layouts)
  • bbe2336 merge: feat/unified-note-editor (add URL imports and live note previews)
  • 39068d4 refactor(frontend): admin tabs, a shared confirm dialog and a menu-driven user table
  • 941dcd5 refactor(frontend): flatten the preset cards
  • aa38912 refactor(frontend): flatten the remaining admin pages
  • 3596e28 refactor(frontend): flatten the stats and shared deck pages
  • c4247d6 refactor(frontend): give every page one width and drop page-level panels
  • 7325205 refactor(frontend): lay out personal settings pages as sections
  • 88ed2c6 refactor(frontend): lay out registration, OIDC and mail admin pages as sections
  • c14623f refactor(frontend): move view colours onto the design tokens
  • 54f7bb1 refactor(i18n): rewrite the import page copy
  • 37189d7 refactor(i18n): tighten user-facing copy and drop developer leftovers
  • ad2cf4f style(frontend): center home metrics and let the import form use the page width
  • 1ada19b style(frontend): tone down the preset shortfall hint

v0.1.7

Choose a tag to compare

@github-actions github-actions released this 09 Oct 14:21
696614f

Changelog

  • 7fe61bc feat(api): edit a deck's name and description
  • ca4d454 feat(api): read a single note by public id
  • 696614f feat(web): undo the last review from the header, including self-rated cards
  • 92c4a21 fix(api): stop a deck rename from rewriting the scheduling preset
  • 94a0ff1 fix(api): treat a deck metadata update as a partial update
  • 9bb37d6 fix(frontend): hide content-editing entries from a deck reader
  • 17cb995 fix(frontend): rebuild a view when its query-scoped identity changes
  • a1f0f62 fix(frontend): rebuild a view when its route entity changes
  • b2bfe89 fix(schedule): bind undo to the target state version and restore pre-rating due
  • 7f004dc fix(store): cap the notes page size and page number
  • d4244f2 fix(store): carry the review undo snapshots through the deck package
  • 8435162 fix(store): validate the cloned deck name with the shared rule

v0.1.6

Choose a tag to compare

@github-actions github-actions released this 09 Oct 11:19
3e29638

Changelog

  • 9094b57 chore(i18n): drop the dead mail preference error strings
  • c820c86 feat(api): address decks, notes, cards and keys by public id
  • c3910fc feat(cardtype): describe card types from the server so a new type touches Go only
  • e239789 feat(decks)!: remove deck visibility and the implicit reader it granted
  • 27a411a feat(decks): give every member of a shared deck their own study settings
  • 5435d28 feat(frontend): use opaque public ids end to end
  • 90767f3 feat(mcp): accept and return public ids in the MCP tools
  • 370a283 feat(media): collect media that no note references after a grace period
  • cd9fb51 feat(review): suspend and unsuspend cards for yourself again
  • 07eddc1 feat(store): add opaque public_id to client-visible models
  • 39dd555 feat(web): address decks, notes and admin resources by public id
  • cf9d045 feat(web): narrow review undo to the graded result panel
  • f764b2c fix(auth): lock login and TOTP attempts after repeated failures
  • 263c5d3 fix(auth): make admin bootstrap and the last-admin guard atomic
  • c323a0a fix(cardtype): render cloze cards without the raw deletion markup
  • 8834b6d fix(decks): let a shared-deck member leave the deck
  • 43245ef fix(frontend): type the preset picker ids as public-id strings
  • e9ba052 fix(mail): hide the administrator notice class from non-admins
  • cbafce0 fix(media): charge unreferenced uploads to the uploader and bound the body
  • 9b2d3a4 fix(optimize): train each preset on the reviews of the decks that use it
  • e1d8b14 fix(review): bury cards until the user's own next review day
  • 3b0295b fix(review): decide ratings and grade sources in the service for every transport
  • 860a69d fix(review): learn ahead instead of ending the session on a pending learning card
  • afc0ea7 fix(schedule): count deck queues with COUNT queries in the user's review day
  • a0cf861 fix(schedule): count deck settings usage in the user's review day
  • 612274a fix(schedule): make card suspension a per-user decision
  • 525ecd4 fix(schedule): pick random new cards in SQL instead of shuffling the oldest
  • 3e29638 fix(settings): make the learn-ahead input full width like the other fields
  • 0058774 fix(store): backfill media_notes for notes written before the mapping
  • cc0a83f fix(store): delete a user without breaking shared media or leaving orphans
  • b9f2b74 fix(store): hide the last numeric foreign keys and add public ids to aggregates
  • b745190 fix(store): soft-delete cards whose template a note no longer produces
  • 915e72f fix(ui): list only real presets in the create-deck picker
  • d2ba435 fix(ui): restore the deck-package import entry on the deck list
  • 83282b8 fix(web): accept public ids in the admin audit target filter
  • 3686547 fix(web): set header and idle timeouts on the HTTP server
  • 62d2979 merge: feat/drop-deck-visibility (remove deck visibility and the implicit reader it granted)
  • 450a060 merge: feat/m10-8-opaque-route-ids (replace auto-increment route ids with opaque public ids)
  • 124b9cb merge: feat/settings-keys-entry (move the API keys entry from the header into /settings)
  • a6f5d9b merge: feat/ui-import-preset (restore the deck import entry and drop the phantom preset option)
  • a014553 merge: fix/fx-1-cloze-render (render cloze cards without raw markup)
  • eafe7e6 merge: fix/fx-10-admin-gate (atomic admin bootstrap and last-admin guard)
  • 011856c merge: fix/fx-11-member-settings (per-member study settings on shared decks)
  • 7da90bf merge: fix/fx-12-optimizer-scope (train each preset on its own decks' reviews)
  • ae8976d merge: fix/fx-13-learn-ahead (learn ahead within a per-user window)
  • 4f01329 merge: fix/fx-14-per-user-suspend (per-user suspension with entry points restored; bury in the user's day)
  • 996c41e merge: fix/fx-15-cardtype-describe (card types describe themselves so a new type touches Go only)
  • afc260b merge: fix/fx-15-frontend (read card types from the server self-description)
  • c4e6e3b merge: fix/fx-16-n-plus-one (assemble the due queue with set-based batch lookups)
  • 54f1d90 merge: fix/fx-17-export-conn (page the export stream so it stops holding the only SQLite connection)
  • aa45d94 merge: fix/fx-19-delete-user (complete user deletion without touching shared media)
  • ca1e4d1 merge: fix/fx-2-orphan-cards (soft-delete cards a note no longer produces)
  • 831e4d5 merge: fix/fx-20-review-undo (narrow review undo to the graded result panel)
  • fed5de5 merge: fix/fx-3-grading-service (ratings and grade sources decided in the service)
  • 33d1ea9 merge: fix/fx-4-deck-counts (accurate deck queue counts in the user's review day)
  • d50f858 merge: fix/fx-5-random-new-order (pick random new cards in SQL)
  • f1e6520 merge: fix/fx-6-7-media (media_notes backfill, quota for pending uploads, media collection)
  • 4aa234b merge: fix/fx-8-http-timeouts (header and idle timeouts on the HTTP server)
  • d40d891 merge: fix/fx-9-login-lockout (lock login and TOTP after repeated failures)
  • b488ab5 perf(api): assemble the due queue with set-based batch lookups
  • f3fb8e1 perf(api): page the export stream so it stops holding the only SQLite connection
  • 33718db refactor(settings): move the API keys entry from the header into /settings
  • 9750122 refactor(web): read card types from the server self-description
  • 1f617a4 test(api): assert the deck list exposes only public ids
  • 8735257 test(mcp): assert the tools speak public ids

v0.1.5

Choose a tag to compare

@github-actions github-actions released this 08 Oct 20:31
2cf738c

Changelog

  • 8c95a5e build: drop the templ and Tailwind steps from the build chain
  • 5a40903 chore(deps): drop the unused templ dependency
  • eb3366c chore(i18n): drop the dead profile keys from the server catalogs
  • b1d8b36 chore(i18n): keep only the catalog keys the server can read
  • afd1edb docs(agents): point the build, layout and worktree rules at the frontend build
  • 053aa17 docs(contributing): describe the frontend build, not the removed generate steps
  • 3428959 docs(frontend): correct the route and view comments left from the SSR cutover
  • 234aa47 docs(readme): drop the templ and htmx credits left over from the SPA migration
  • 09606a6 docs(roadmap): drop the README summary pointer that no longer exists
  • 7863117 docs(roadmap): keep only the open work
  • 3721c13 docs(roadmap): retire the M0-6 templ toolchain entry
  • 1224741 docs(web): align the cutover tests' headers with the tests that remain
  • 6a54f3a docs(web): describe what the transport layer serves now, not the removed page layer
  • debb89a feat(auth): confirm the password and warn up front when registration is closed
  • a92b697 feat(deploy): add a compose file for the PostgreSQL setup
  • 32087e6 feat(web): limit the header language switcher to signed-out visitors
  • b6c8939 feat(web): make the time zone and review day cutoff proper pickers
  • 470b3ee feat(web): mirror the server default day cutoff in the settings view
  • 4dca805 feat(web): persist the header language switch to the account
  • fc89d36 feat(web): show the program version in the SPA footer
  • e84f5f8 fix(auth): make the closed-registration notice immediate, centered and truthful
  • 50dd522 fix(deploy): use the Debian PostgreSQL image in the compose file
  • d8e4230 fix(mail): name the default preset from the catalog in the optimise mail
  • cb4ea99 fix(presets): label the default preset from the catalog and protect its name
  • 4b1a755 refactor(api): drop the unused updateLocale client method
  • 3ed4a1d refactor(i18n): drop the spa marker from the catalog keys
  • e19145d refactor(ui): restore the Badge component and route status chips through it
  • 22a0152 refactor(web): drop the /spa/* migration aliases
  • 1c17b1f refactor(web): drop the spa prefix from the Go identifiers
  • d8e6b16 refactor(web): fold the views package into web
  • eadfaa3 refactor(web): re-derive the CSP rationale and its guard from the served assets
  • f05e092 refactor(web): rename the SPA type and field to Shell
  • b3bdf9c refactor(web): rename the spa_*.go files after what they hold
  • e223664 refactor(web): render the share receive policy as a dropdown
  • 682e442 test(web): collapse the per-page route suites into one table
  • c35de4c test(web): drop the per-block catalog parity copies
  • 4862209 test(web): drop the source-text guard suites

v0.1.4

Choose a tag to compare

@github-actions github-actions released this 07 Oct 17:24
74a29ee

Changelog

  • 7e83e09 chore(web): drop the six share-policy keys nothing reads
  • bd8a4fd docs(comments): make the SPA comments self-contained
  • 5925641 docs(comments): make the domain-layer comments self-contained
  • 725370d docs(comments): make the service-layer comments self-contained
  • d794380 docs(comments): make the transport and web comments self-contained
  • c75e31d docs(web): state the tag dimension's scope instead of letting it look like the deck list
  • 59ce7d7 feat(mail): render admin templates on top of the built-in bodies
  • b3df65e feat(mail): render the web senders' mail from templates
  • 0a67631 feat(mail): templates reach the reminder and digest workers too
  • a1bbf51 feat(mail): the three senders that were only planned — deck sharing, access changes, finished optimisation
  • e54be91 feat(sharing): share by invitation, not by imposition
  • d981e01 feat(sharing): show the owner who was invited, and take usernames for the allowlist
  • 4bbbd32 feat(web): accept or decline a deck invitation, and pick who may invite you
  • 53d7d03 feat(web): admin endpoints for mail templates
  • e275376 feat(web): adopt a component library for selects, dialogs and checkboxes
  • 29310ff feat(web): edit cards through per-type field forms instead of a JSON blob
  • c76e725 feat(web): give the auth and account screens stable test hooks
  • 952c417 feat(web): make deck filtering live, drop the deleted listing, let decks switch presets
  • 7690ed1 feat(web): merge the mail tabs and pre-fill the template editor
  • c38bda3 feat(web): replace native checkboxes and radio groups with library components
  • 2464fe8 feat(web): the mail template page in the admin panel
  • 8284387 fix(web): declare the username form of the share policy in the client
  • c5073fe fix(web): finish the remaining checkbox swaps and guard native inputs
  • f5a0acd fix(web): give the note editor's fields one width
  • bbead1e fix(web): lay the admin tabs out on a fixed grid
  • a307262 fix(web): translate the deck visibility and card kind badges
  • f6d6147 fix(web): unify the deck page buttons and move the last hardcoded copy into the catalog
  • bba1487 refactor(mail): drop the two email types that had no sender
  • 1e62119 refactor(mail): one definition of the built-in body, shared with the admin page
  • b27534c refactor(web): finish the button migration in the media picker and review card
  • e12ac37 refactor(web): give form fields one skin and one explicit font size
  • dae87d1 refactor(web): render every loading state through one Skeleton component
  • 1bf3268 refactor(web): render the admin buttons and the header CTA through ui/Button
  • 8f0b368 refactor(web): render the auth and account buttons through ui/Button
  • f1b6c13 refactor(web): render the deck, note, presets and stats buttons through ui/Button
  • 119635f refactor(web): render the settings buttons through ui/Button
  • 65edcba refactor(web): unify page skeleton, card surfaces and copy, and fix key revoke
  • 795575c test(web): guard the field skin, the button fill and the view copy

v0.1.3

Choose a tag to compare

@github-actions github-actions released this 07 Oct 10:41
v0.1.3
02d7731

Changelog

  • 02d7731 feat(ui,api): redesign decks, review and presets views with deletion and batch export