You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
docs(docs): rewrite for v0.3.0 MVP + dark-first palette (#178)
* docs(docs): rewrite for v0.3.0 MVP + dark-first palette (closes#177)
The docs site still read like pre-alpha — home lead with BYOK AI (Phase 4,
not shipped), the webapp i18n strings said "Phase 0 — Bootstrap / Pre-alpha",
self-hosting/runtime-profiles.md claimed "Phase 0 has no entities or
migrations yet". None of that is true after today's v0.3.0 tag.
Changes:
- docs/index.md — new hero narrative leading with what ships today in
v0.3.0 (auth, orgs, keys + translations + ICU, FTS, import/export, API
keys/PATs). Moves BYOK AI into a "coming in v0.4.0" section. New capability
grid. Roadmap table marks Phases 0–3 as ✅ shipped.
- docs/quickstart.md — new 10-minute path from `docker compose up` to
exported i18next JSON. Walks sign-up → verify → org → project → import →
edit → export. Troubleshooting table for the four most common snags.
- docs/_config.yml — switch `color_scheme` to `dark` (just-the-docs
built-in). Aligns with developer-docs muscle memory (Stripe, Cloudflare,
Tailwind all default dark). Description updated to reflect v0.3.0.
- docs/self-hosting/runtime-profiles.md — unstick Phase 0 references;
enumerate the four Flyway migrations that actually exist on master; bump
the boot-time log-line version to 0.3.0.
- docs/llms.txt — add Quickstart + home + all Phase 1–3 API/product pages
that were missing from the hand-maintained index. Update the blurb at the
top to reflect v0.3.0 scope.
- docs/llms-full.txt — regenerated via scripts/gen-llms-txt.sh (picks up
the new home + quickstart content).
- webapp/src/i18n/en.json — `app.phase.current` "Phase 0 — Bootstrap" →
"Phase 3 — MVP shipped (v0.3.0)"; `app.status.prealpha` "Pre-alpha" →
"Prerelease (0.x)". Strings are not currently rendered anywhere in the
UI; this is purely hygiene so the next page that surfaces them reads true.
Webapp lint + typecheck + 104/104 tests green.
No new env vars, no new compose services, no API surface change, no new
ADR. This is pure docs + copy + visual palette.
Closes#177
* fix(docs): Liquid-templated internal URLs so lychee resolves them
* fix(infra): exclude localhost URLs from lychee (quickstart uses them)
**The open-source, self-hosted translation management platform for teams that ship in more than one language.** MIT. Every feature free. Keys, translations, ICU validation, JSON import/export shipping today. Bring-your-own-key AI arrives in Phase 4 — the platform runs end-to-end without it.
Translately v0.3.0 is the **end of the MVP**: Phases 0 through 3 are complete, the platform works end-to-end, every capability listed here is in `master` and running on a signed release.
28
+
29
+
| Capability | What it means for you |
30
+
|---|---|
31
+
|**Email + password auth** with verified accounts, refresh-token rotation, forgot-password + reset | A translator can sign up, verify email, and sign in — nothing else needed to start. |
32
+
|**Organizations, projects, members** with OWNER / ADMIN / MEMBER roles, last-owner protection, private-org semantics | Multi-tenant from day one. Each org scoped cleanly; non-members can't enumerate private orgs. |
33
+
|**Keys, namespaces, translations** with the full 5-state lifecycle (`EMPTY → DRAFT → TRANSLATED → REVIEW → APPROVED`) | Translators get a sticky-col table with per-cell autosave; admins get namespaces to group keys by feature. |
34
+
|**ICU MessageFormat validation** with CLDR plurals, line + col error reporting | Bad ICU is rejected at save time, not discovered in production. |
35
+
|**Postgres full-text + trigram key search**| Find a key in a 10k-key project without dragging Elasticsearch into your self-host stack. |
36
+
|**i18next JSON import + export** — flat and nested shapes, `KEEP` / `OVERWRITE` / `MERGE` conflict modes, per-row ICU validation | Paste your existing translations in, export them back out. One language per call; multi-language dumps as a scriptable GET. |
37
+
|**API keys + Personal Access Tokens** with scope intersection computed on every request | CI pipelines + scripts authenticate with machine credentials; revocation is instant. |
38
+
|**Light + dark + keyboard-first UI** — WCAG 2.1 AA, Radix Dialog + focus trap, `prefers-reduced-motion` respected | Accessible out of the box. No gated "enterprise a11y" SKU. |
39
+
40
+
All of it MIT. All of it free. No paywalled tier exists.
41
+
42
+
## Coming next — v0.4.0 (Phase 4)
43
+
44
+
-**Bring-your-own-key AI** — per-project OpenAI / Anthropic / Google / Azure / custom endpoints, envelope-encrypted at rest. **The platform runs end-to-end without this configured.**
45
+
-**Machine translation** via the same BYOK layer for non-generative providers.
46
+
-**Translation Memory** over `pgvector` + trigram.
47
+
-**Async Quartz + SSE** for the bulk-import paths that v0.3.0 ships sync.
48
+
49
+
[Full roadmap](#roadmap) below.
20
50
21
51
---
22
52
23
53
## Documentation by surface
24
54
25
-
| Surface |What's in it|
55
+
| Surface |Start here|
26
56
|---|---|
27
-
|[Product]({{ '/product/' | relative_url }}) | Walkthroughs of every user-visible flow — app shell, theming, authentication. |
|[Architecture]({{ '/architecture/' | relative_url }}) | Module map, data model (V1–V4), request lifecycle, multi-tenancy, crypto, ICU, search, ADRs. |
61
+
|[Self-hosting]({{ '/self-hosting/' | relative_url }}) | Runtime profiles, dev compose, hardening checklist. Everything an operator needs. |
31
62
32
-
Every PR ships its docs — see [CLAUDE.md rule #10](https://github.com/Pratiyush/translately/blob/master/CLAUDE.md#hard-rules-non-negotiable) and the [contributing rules](https://github.com/Pratiyush/translately/blob/master/.kiro/steering/contributing-rules.md).
63
+
Every PR ships its docs — see [CLAUDE.md rule #10](https://github.com/Pratiyush/translately/blob/master/CLAUDE.md#hard-rules-non-negotiable). Stale docs are worse than missing docs.
-**Bring your own AI.** Per-project provider + key, envelope-encrypted at rest. The platform runs end-to-end with **zero AI configured**.
67
+
-**MIT, no gated tier.** SSO, SAML, LDAP, Tasks, Branching, Glossaries, Webhooks, CDN, custom storage, granular permissions, audit logs — all on the free shipping schedule. No "enterprise" upsell.
68
+
-**BYOK is the only AI shape.** Per-project encryption key, envelope-sealed at rest, zero Translately-owned API keys in the loop. If AI is off, every feature except AI suggestions still works.
38
69
-**Quarkus + Kotlin backend.** Fast boot, low memory, native-image friendly for the zero-cost deploy shape.
39
-
-**ICU from day one.** Native ICU MessageFormat parsing, CLDR plurals, CodeMirror 6 editor with inline validation.
See the [CHANGELOG](https://github.com/Pratiyush/translately/blob/master/CHANGELOG.md) for what's landed.
87
+
See the [CHANGELOG](https://github.com/Pratiyush/translately/blob/master/CHANGELOG.md) for per-PR detail and [RELEASE-NOTES](https://github.com/Pratiyush/translately/blob/master/RELEASE-NOTES.md) for the long-form narratives.
./gradlew :backend:app:quarkusDev # backend at :8080
66
-
pnpm --filter webapp dev # webapp at :5173
67
-
```
89
+
## Download
68
90
69
-
Self-hosters: start with the [hardening checklist]({{ '/self-hosting/hardening/' | relative_url }}) before exposing to the internet.
91
+
-[Full docs bundle (ZIP)]({{ '/downloads/translately-docs.zip' | relative_url }}) — every page under `docs/`, deterministic snapshot of the latest `master`.
92
+
-[LLM corpus (single file)]({{ '/llms-full.txt' | relative_url }}) — every `.md` concatenated with file-boundary markers, per [llmstxt.org](https://llmstxt.org). For Claude, Cursor, in-house assistants.
93
+
-[Link index]({{ '/llms.txt' | relative_url }}) — the short llms.txt discovery file.
94
+
- Container images: `ghcr.io/pratiyush/translately-backend:v0.3.0` + `ghcr.io/pratiyush/translately-webapp:v0.3.0` (published by `release.yml` on every signed tag).
70
95
71
-
## Download
96
+
## License
72
97
73
-
-[Full docs bundle (ZIP)](downloads/translately-docs.zip) — every page under `docs/`, deterministic snapshot of the latest `master`.
74
-
-[LLM corpus (single file)](llms-full.txt) — every `.md` concatenated with file-boundary markers, per [llmstxt.org](https://llmstxt.org). For Claude, Cursor, in-house assistants.
75
-
-[Link index](llms.txt) — the short llms.txt discovery file.
98
+
-**Outbound:**[MIT](https://github.com/Pratiyush/translately/blob/master/LICENSE). Use it, fork it, ship it, sell it — no strings.
99
+
-**Inbound:**[Contributor License Agreement](https://github.com/Pratiyush/translately/blob/master/CLA.md) (Apache-ICLA-adapted, copyright-license form — contributor retains ownership). Every PR carries a ticked CLA checkbox.
0 commit comments