Diese Seite gibt es nur auf Englisch.
What changed in Seed
Every feature and fix merged into Seed, newest first, each linked to its pull request. Seed has no version numbers: what is on main is the current Seed.
Last change · 229 changes in the last 30 days
Seed is built by one developer, Anton Shubin, who uses it for his own products and client work. It is MIT-licensed: your copy is yours, and a product takes later changes as a patch (Building a product on Seed).
Subscribe: RSS feed · Newsletter
- A benchmark page measures how one large group performs on the device it runs on. #581
- Pull only what changed since the device's cursor. #568
- Right-to-left layouts in the SPA and admin. #532
- Stats screen. #506
- A language per post and per subscriber. #528
- Catalog photos — faster ready state, lightbox, cover mark, named image jobs. #515
- E-mails in the recipient's language, zone and format. #512
- The public website in every language, with hreflang. #509
- Translate API and domain errors. #505
- Catalog item editor, toasts and leftovers. #504
- Translate admin screens. #490
- Translate notes, tags, search and shortcuts screens. #488
- Translate sign-in and profile screens. #486
- Tracking links per source, through Umami. #492
- Translate API tokens, notifications, onboarding, overview and billing screens. #487
- Translate the group screens. #489
- The catalog module: domain, server, admin and public API. #481
- The user's language in both apps. #477
- SPA=false and operator:create for products without sign-up. #482
- File names, thumbnails, search and downloads in Files. #479
- Process uploaded images. #467
- Contact links, a site setting. #468
- Profile picture. #435
- Choose the sort direction. #450
- Private admin survives nightly reset. #434
- Attachments with quotas. #426
- A bot every product extends. #423
- Download my data. #420
- Public blog, RSS and SEO. #403
- Blog module with editor. #402
- Posts, publishing and newsletter send. #399
- Sign in and sign up by e-mail link. #393
- Scheduling API and admin Jobs module. #398
- Bundled file store, S3 through Garage. #400
- Notes list with search, filters, authors and dates. #361
- Any colour for tags and groups, tag note counts. #363
- Try the app as a guest. #352
- Group overview built from widgets. #351
- Split the profile into sections. #364
- Demo video with captions and music. #357
- Group page tabs with a Plan and billing tab. #331
- Deno task init and Traefik started by dev. #341
- Passkeys. #322
- Keyboard shortcuts, ? to list them. #319
- Export and import a group. #320
- Pool connections with pgbouncer. #317
- Admin video with music. #303
- Author and updated line in page hero. #298
- Llms.txt, dated sitemap, named AI bots. #297
- Redirect /mvp to antonshubin.com. #299
- Lively seed data. #292
- One product entity in structured data. #296
- Wording for search and AI answers. #295
- Umami analytics. #291
- Admin panel page. #288
- Admin panel video. #281
- Real addresses, hidden from the operator. #258
- Shared demo accounts, fake data and a nightly wipe. #251
- One trial per person, not per group. #245
- Search notes and groups with Ctrl+K. #481
- One AppShell frame for the SPA and the admin. #532
- Ask before signing out with unsent changes. #527
- One brand across the site, app and admin. #476
- Preferences synced across devices. #480
- Sidebar-only shell for the SPA and admin. #483
- Prove the address before sign-up creates anything. #478
- Create tokens and invitations on pages, align wording. #479
- Add the billing module. #471
- Adopt SavedCopyNotice, bump ts-libs to 1.75.0. #473
- One editor page to create and edit a group. #468
- Tag editor page for create and edit. #461
- Notes and tags in the shared column. #449
- Profile as one set of setting cards. #447
- Groups screens in the shared column. #450
- Notifications and sign-in screens in their columns. #448
- One layout spine for signed-in screens. #445
- Audit log and System pages. #443
- Manage groups from the operator area. #441
- Role, session, reset link and CSV export for operators. #442
- Add the features page. #436
- Add the compare page. #437
- Add the newsletter module to the operator area. #439
- Add real prices and the founders page. #438
- API tokens, devices and notifications in the operator area. #440
- Redesign the operator area as a module dashboard. #432
- Seed site frame and home page. #430
- Screenshots and social images for the website. #431
- Add the operator area on its own host. #422
- Carry out the account-deletion decisions of #357. #415
- Purge unread notifications after a year. #412
- A scheduled backup and a tested restore. #399
- Sign in with Google and GitHub. #380
- First-steps checklist and tour in the SPA. #377
- Purge tokens 30 days after expiry. #339
- Add tags. #323
- Make local data a swappable module. #319
- Security headers on the API, SPA and MPA. #317
- Make the transport a swappable module. #315
- Create the proxy network when missing. #310
- Offline-first PWA on the shared libraries. #304
- Starter data on sign-up. #296
- Runtime configuration from /config.json. #295
- Personal API tokens. #292
- Report browser and API errors. #291
- Record when a user was last seen. #289
- List sessions and sign out other devices. #285
- Soft delete, restore and undo. #284
- In-app inbox. #283
- Delete my account. #280
- Move all of a group's data to another group. #281
- Group activity log. #279
- Open a note from another of my groups. #277
- Description, colour and emoji. #278
- App frame and account screens, redesigned. #269
- Redesign the group and billing screens. #273
- Redesign the notes list and note editor. #272
- Public website for Template. #271
- Serve the MPA on its own domain. #264
- Use Notice and per-member label. #263
- Visitors subscribe to mail. #261
- Hand billing over on owner transfer. #258
- Move notes between groups. #259
- Bill pro per member. #251
- Transfer group ownership. #249
- Trials, cancelling, notices. #246
- Group invitations. #243
- Recover when the app returns. #241
- End the plan after a grace period. #240
- Plan limits and feature gates. #238
- Subscriptions per group with Stripe. #235
- Manage members and roles. #234
- Return to the requested page. #226
- React to permission changes. #225
- Verify e-mail with a one-time code. #216
- Rename, delete, keep at least one. #215
- Note pages for create and edit. #209
- Redesign group list and settings pages. #208
- E-mail address and password reset. #207
- Notes at /notes with a group picker.
- Store the selected group per user.
- Profile and push over the socket. #193
- Keep auth rate limits in valkey. #186
- Meet the screen contract on pc 2.0.
- Read one group; fix list precision. #183
- Add delayed and repeating jobs. #182
- Run its e2e in ci and deploy it. #176
103 fixes
- Start the demo checklist with the invite done. #589
- Site details and picture frames. #587
- A page for unknown addresses. #588
- Launch copy, module count and wording. #586
- Unlinking a method or signing in over a session drops push rows. #577
- A device signed out from elsewhere stops getting notifications. #571
- Issue a new session when a guest keeps their account. #569
- Ask for an address before a first password, and show refusals. #552
- Budget operations per person and per guest address. #551
- Newsletter takes the product's own name. #555
- Stand-in authors may always write. #553
- Contact links editor wording, hints and footer handles. #556
- Correct blog editor and jobs wording. #554
- Rewrite every translation in context. #550
- Clearer link wording in the bot and the dialog. #518
- Tell open tabs when an operator removes a picture. #520
- Phone layout and wording on the person and System pages. #516
- Page order and small wording on Notes, sign-in link and Account. #517
- Cancelling a note upload does not always cancel it. #519
- Pages open during a deploy wait out every refusal. #521
- Allow Fresh's render nonce in script-src. #503
- Pass stdin through deno task compose. #502
- Name the SPA when it is kept off. #497
- Copy the language catalogs to the server. #491
- Show each tag in its colour in the picker. #447
- Seed audit rows in time order on any date. #470
- Send the API reference to the server. #449
- Invitation link opens sign-up with context. #437
- Tab out of preference lists reaches the next control. #424
- Sign-in link hand-off and provider unlink. #425
- Confirm uploads into a key the browser never had. #422
- API build card spreads labels from values. #421
- Keep a region change made during a save. #404
- Old zone names without a Debian mirror. #390
- Tap targets, phone submits, passkey details. #385
- Database knows the old zone names browsers report. #388
- Account menu opens the profile, install offer gap, toasts. #360
- Skip the dry run for a project with no containers. #358
- Init write keeps modes, one-line Traefik error. #355
- Init and dev follow-ups. #348
- /compare and /features layout at 390 px. #323
- One name per thing, links that say where they go. #316
- Count the IPv6 sign-up budget per /48. #311
- Cache static assets, stop no-store on pages. #294
- Finish the public site redesign. #240
- Search palette snippets, short-query line and focus after a pick. #242
- Polish the app shell's first screens. #241
- Billing dates in the cancel dialog, billing actions in the audit log. #239
- Sign-out deletes everything the app keeps in the browser. #237
- A stranger can no longer block an address's sign-up codes. #526
- An old address opens no account through a provider. #520
- End push subscriptions at sign-out and password reset. #519
- A failed read of sign-in methods offers a retry. #518
- Survive a kill, a new server and a shared repository. #509
- Proof for two-factor on, one lock for session guesses. #514
- An account with an unproven address cannot invite. #510
- Check api and mpa health over HTTP. #511
- Deploy refuses a dirty tree, CI stops retrying browser tests. #505
- Show a failed first groups read with Try again. #507
- Admin screens pass the design audit. #502
- Server faults, indexes and test gaps. #467
- Mask the domain in newsletter audits. #475
- Forget the last person's copies on switch. #470
- Accept X-Real-IP from the proxy only. #469
- Owner on phone, search out of URLs. #466
- Show operators as Support team in log. #465
- Ignore vapid.json in every folder. #452
- Keep libs/ui styles in container builds. #435
- Ask for proof and send a mail when a sign-in method changes. #419
- Drop unproven sign-in methods on a reset. #405
- Let an account without a password act on itself. #398
- Put a socket proxy between Vector and Docker. #401
- Keep the product up when a deploy step fails. #402
- Show the groups as loading until the first read. #397
- Proof before two-factor goes off, and a short lock per sign-in name. #395
- Name image registries and freeze the lock in builds. #378
- Refuse text Postgres cannot store with 400. #375
- Replace newer server files, let two projects share a host. #368
- Mailed newsletter links open the website. #366
- Move focus to the page heading when the install offer closes. #374
- Store a push address of up to 2048 characters. #369
- Keep the session and the saved data through a deploy. #365
- Keep the nightly cleanup alive and log failed jobs. #363
- Send signed-out visits to /tags and /notifications to sign-in. #364
- Harden personal API tokens. #359
- Make db:seed create the demo user and hold migration names in order. #362
- Close the proxy's dashboard and the public consoles. #361
- Cap tags, audit changes, refuse NUL in names. #358
- Give the e2e harness a tracked home and make the SPA build finish. #338
- Keep the saved copy when the proxy answers 502 or 404. #333
- REST writes name the page's user. #334
- Dev SPA limits and the sessions e2e address. #307
- Instant offline undo with focus; move-all notice names group. #290
- Delete files removed from the repo. #274
- No grace after a failed trial charge. #254
- Pull when the socket first opens. #255
- Keep subscribed groups out of the purge. #237
- Write auth audit rows in the action's tx. #233
- Charge address changes to the account. #232
- Keep long request ids in audit rows. #222
- Keep env and key files out of images. #211
- Surface event listener failures. #188
- Anchor spacing skip patterns below root. #185
- Work offline with a local store. #124
- Add rest-only reference client. #121
- Add a reference aggregate. #118
- Move group calls to the socket. #109
- Move auth and profile screens to libs/ui. #106
- Import the Vite plugins and spacing scale from the library. #56
- Use Shell from preact-components for the signed-in layout. #52
- Add age64 env tooling. #10
23 fixes
- Drop loki's healthcheck that cannot pass. #120
- Apply migrations on deploy. #115
- Run the worker in compose. #114
- Require a password for valkey. #104
- Stop the white flash in dark theme. #99
- Make the first deploy hands-off. #102
- Delete owned groups in dev cleanup. #101
- Let postgres decide the second factor. #100
- Limit wrong one-time codes per user. #94
- Pull MinIO from the community fork. #93
- Serve signed-in requests while Valkey is down. #88
- Repair env, deploy, seed and backup. #89
- Send web push to one user only. #87
- Hide profile until second factor. #83
- Check Origin on the WebSocket upgrade. #85
- Docker base configs and cert resolver. #84
- Keep 2FA state across reloads. #76
- Give one-time codes their own rate limit. #72
- Refuse cross-site mutations on every route. #55
- Adopt ts-libs 1.4.0, fix group creation behind TLS. #49
- Fail loudly without integration DB. #32
- Accept TOTP codes with a leading zero. #29
- Merge prod https routers by name. #30
- Auth/profile flow + mobile ui. #1
- Implement webhook handling and action processing.