No description
  • TypeScript 63.8%
  • Vue 32.6%
  • CSS 2%
  • PLpgSQL 1.1%
  • JavaScript 0.3%
  • Other 0.2%
Find a file
mekanoide a208b24da9 test: share the Supabase test double and typecheck the test suite
- add tests/helpers/fake-supabase.ts: a configurable query-builder double
  that records every query and resolves each table through a handler
- migrate the seven hand-rolled fakes to the shared helper, keeping their
  assertions on updates/deletes/created
- add tsconfig.tests.json and run it in pnpm run typecheck so tests are
  checked again (app + server + tests)
- fix the test type errors it surfaced (Theme annotation, typed fetch mock)
2026-10-01 15:44:12 +02:00
.forgejo chore: move private docs and tickets to the mgmt repo 2026-09-11 12:16:52 +02:00
.githooks chore(workflow): adopt a single-trunk git flow 2026-09-21 01:07:46 +02:00
app chore: remove dead code, unify conventions and clean up i18n 2026-09-28 19:15:47 +02:00
docs chore(workflow): adopt a single-trunk git flow 2026-09-21 01:07:46 +02:00
i18n/locales chore: remove dead code, unify conventions and clean up i18n 2026-09-28 19:15:47 +02:00
public feat: dynamic per-host robots.txt with AI crawler blocking 2026-09-07 19:40:45 +02:00
scripts fix: hard deadline for fediverse credential verification, DNS included 2026-08-28 12:30:21 +02:00
server chore: remove dead code, unify conventions and clean up i18n 2026-09-28 19:15:47 +02:00
shared chore: remove dead code, unify conventions and clean up i18n 2026-09-28 19:15:47 +02:00
supabase/migrations fix: repair verified bugs found in the codebase audit 2026-09-25 03:01:18 +02:00
tests test: share the Supabase test double and typecheck the test suite 2026-10-01 15:44:12 +02:00
types chore: remove dead code, unify conventions and clean up i18n 2026-09-28 19:15:47 +02:00
.dockerignore lots of fixes 2026-06-03 08:22:40 +02:00
.gitignore chore: move private docs and tickets to the mgmt repo 2026-09-11 12:16:52 +02:00
AGENTS.md chore(workflow): adopt a single-trunk git flow 2026-09-21 01:07:46 +02:00
CONTEXT.md chore(workflow): adopt a single-trunk git flow 2026-09-21 01:07:46 +02:00
Dockerfile fix: auth problems, slug in public posts 2026-06-03 10:57:33 +02:00
eslint.config.mjs initial commit 2026-05-29 17:15:26 +02:00
fedify.d.ts fix: add fedify NuxtConfig type augmentation and remove duplicate runtime config keys 2026-07-31 09:39:25 +02:00
nuxt.config.ts fix: bound expensive endpoints, normalise request errors and clean up dead code 2026-09-25 12:36:05 +02:00
package.json test: share the Supabase test double and typecheck the test suite 2026-10-01 15:44:12 +02:00
pnpm-lock.yaml fix: repair verified bugs found in the codebase audit 2026-09-25 03:01:18 +02:00
pnpm-workspace.yaml feat: image upload and embedding in the post editor 2026-08-01 18:53:24 +02:00
README.md refactor: change readme text 2026-08-21 11:49:59 +02:00
tsconfig.json initial commit 2026-05-29 17:15:26 +02:00
tsconfig.tests.json test: share the Supabase test double and typecheck the test suite 2026-10-01 15:44:12 +02:00
vitest.config.ts fix: harden public search, surface silent failures and paginate PostgREST reads 2026-09-25 09:57:38 +02:00

letr.es — nice and easy blogs, no ads, no tracking

letr.es is a nice and easy blogging platform. Write in Markdown with a clean WYSIWYG editor, publish to your own corner of the web — letr.es/{handle}. No ads, no trackers, no algorithms.

Your content is yours. Built and hosted in the European Union.


Why letr.es?

  • A genuinely nice editor — a TipTap-based WYSIWYG that outputs Markdown. Code blocks, tables, links, images, all inline, distraction-free.
  • Your blog, your space — every Author gets letr.es/{handle}. No feed algorithms, no recommendations pushing other people's content.
  • Private by default — no analytics, no tracking, no third-party scripts. The only cookies are for authentication and preferences.
  • Open web by default — RSS and a newsletter on every plan, cross-posting to Bluesky.
  • EU-hosted — your data stays under European law (GDPR), on EU infrastructure.
  • Indie-run — built and operated by one person. No VC pressure, no enshittification pipeline.

Features

  • WYSIWYG Markdown editor with syntax highlighting and autosave
  • Public blogs at {username}.letr.es, with Topics and search
  • Custom slugs, drafts, and pending edits for published Posts
  • About page with Markdown support
  • RSS feed and newsletter per Author
  • Image uploads inside the editor
  • Post export (Markdown, ePub) and full-blog export (Markdown ZIP)
  • Import Posts from other platforms (Markdown, WordPress, Medium, Bear)
  • Dark mode, Spanish and English

Pricing

Plan Price Posts Features
Free €0 10 Editor, blog page, Topics, search, RSS, newsletter
Pro €4/mo or €36/yr Unlimited + Custom blog name, custom domain (coming soon)

No ads, no tracking, no data selling. Ever.

Built with

Try it

letr.es — sign in with your email, start writing in seconds.

Repository

This is the full source code of the platform. It's public for transparency, not (yet) for self-hosting. Contributions and feedback are welcome.

License: MIT