AI product · Web app & Chrome extension
Savedly
Save anything. Find it when you need it.
- Web app
- Chrome extension
- Open source
- Self-hostable
The problem
Saving is the easy part. Finding it again is where it goes wrong. Links, screenshots and notes pile up in different places and never resurface when you need them.
Under the hood
How Savedly is built.From the real codebase, not a slide.
712
Commits
4 Aug – 26 Oct 2026
107k
Lines of TypeScript
Server, web app, extension
37
API modules
One folder per feature
51
Database tables
Postgres + pgvector
57
Migrations
Drizzle ORM
83
Web app pages
Next.js 16
System architecture
Three apps, one API, background workers and bring-your-own-key AI. Hover a part to follow its connections.
Savedly backend
API
The one backend every client talks to: 39 routers under /api/v1, Zod-validated requests, httpOnly JWT sessions with device-bound refresh tokens. Shipped as a Docker image behind Caddy on AWS.
- Express
- TypeScript
- Zod
- JWT
- Caddy
- AWS
server/src/app.ts
server/src/modules
Hover or tap a part to follow its connections.
The AI ingestion pipeline
Every save runs through the same LangGraph state machine, whatever its format. Independent steps run in parallel; optional steps can fail without losing the memory.
Hover a step to see what it does, or run the pipeline.
Optional Required
Ask Savedly: a grounded agent
A corrective-RAG agent that answers only from your library, checks its own answer, and can act on your account through the same services as the app.
- Front desk
- Agent
- Tools
- Grounding check
- Answer
Agent ⇄ Tools loops until the agent has enough to answer.
Step 1 of 5
Front desk
A quick classifier checks the request is about the library. Off-topic requests get a polite reply here, before any expensive call.
Ask Savedly
What did I save about sourdough hydration?
20 tools the agent can use
Writes call the same services as the REST API. Delete moves to Trash, so a misread request is always recoverable.
read
- search_memories
- search_memories_by_date
- find_memories
- find_related
- read_memory
- list_collections
- list_tags
- list_upcoming_events
- search_web
- platform_help
write
- create_memory
- update_memory
- update_many_memories
- delete_memory
- restore_memories
- create_collection
- create_calendar_event
- update_event
- remove_event
- set_reminder
Hybrid search
Two searches in parallel, merged into one ranked list. If the semantic leg is unavailable, keyword search still answers.
Reciprocal Rank Fusion · server/src/modules/ai/search/rrf.ts
How the project is run
A three-month build, managed like a long-lived product: enforced architecture, one module pattern, automated delivery and written docs.
Commit activity
Commits per week, Aug – Oct 2026
181commits · week 42
Enforced layers
Imports only go down. pnpm check:arch fails on an upward import or a cycle.
- Approutes/, app.ts, server.tsMounts routers and job starters
- Modulesmodules/<name>/37 features; others import only through api.ts
- Platformplatform/Runtime-configured services: storage, mailer
- Shared · DBshared/, db/Crypto, errors, logger, schema
- Configconfig/Env validated with Zod at startup
One pattern, 37 modules
Every feature has the same five files, so any engineer can find their way.
- account
- admin
- ai
- ai-settings
- ai-usage
- announcements
- auth
- batch
- billing
- blog
- collection
- config
- contact
- feature-flags
- files
- health
- help-assistant
- highlight
- import
- insights
- instance-settings
- integrations
- memory
- messages
- notification
- plans
- report
- roadmap
- search
- settings
- share
- tag
- upload
- user
- vault
- whats-new
From pull request to production
GitHub Actions: CI on every pull request, CD on every merge.
- 1
Pull request
Branch per feature; Dependabot keeps dependencies current
- 2
CI
Server: typecheck. Web app: lint and production build
- 3
Merge to main
63 merged pull requests so far
- 4
Build image
Typecheck, then a Docker image pushed to GHCR
- 5
Deploy
SSH to AWS, pull the image, restart behind Caddy
- 6
Verify
Live API check; logs printed if the deploy fails
Enforced architecture
pnpm check:arch fails the build on an upward import or an import cycle, in the API and the web app.
Documented
24 docs: architecture, self-hosting, AWS deploy, release process, feature specs.
Changelog
Every notable change recorded in Keep a Changelog format.
Open source
AGPL-3.0, with contributing guide, code of conduct and security policy.
Secure by default
AI keys encrypted with AES-256-GCM; httpOnly cookies; refresh tokens hashed and tied to a device.
Graceful AI
Every AI step is optional: if a provider fails, the memory still saves with whatever succeeded.
Building something like this?
Tell us about your product. You’ll get a clear plan and quote.