Live status per phase. Update on phase start, weekly, and on phase completion. Long-form narrative for each release lives in RELEASE-NOTES.md; machine-readable per-PR log is CHANGELOG.md; the actionable task ledger is tasks.md.
Legend: ⚪ not started · 🟡 in progress · 🟢 shipped · 🔴 blocked · ⚫ dropped.
| Phase | Theme | Tag | Status | Started | Shipped |
|---|---|---|---|---|---|
| 0 | Bootstrap | v0.0.1 | 🟢 | 2026-04-16 | 2026-04-17 |
| 1 | Auth + Org/Project skeleton | v0.1.0 | ⚪ | — | — |
| 2 | Keys + Translations + ICU | v0.2.0 | ⚪ | — | — |
| 3 | JSON import/export | v0.3.0 | ⚪ | — | — |
| 4 | AI / MT (BYOK) + TM | v0.4.0 | ⚪ | — | — |
| 5 | Screenshots + JS SDK + In-context editor | v0.5.0 | ⚪ | — | — |
| 6 | Webhooks + CDN + CLI + Glossaries | v0.6.0 | ⚪ | — | — |
| 7 | Tasks + Branching + SSO/SAML/LDAP + Audit + Polish | v1.0.0 | ⚪ | — | — |
Target end-to-end: 12 weeks from Phase 0 kickoff (2026-04-16) → v1.0.0 approximately 2026-07-09.
Started: 2026-04-16 · Target: 2026-04-18 · Shipped: 2026-04-17 · Owner: Pratiyush
-
_reference/read-only third-party reference sources cloned, gitignored - Top-level docs: README, LICENSE, CHANGELOG, RELEASE-NOTES, CONTRIBUTING, CODE_OF_CONDUCT, SECURITY, CODEOWNERS, CLAUDE.md, AGENTS.md
-
.gitignoreat repo root -
.kiro/steering/— architecture, contributing-rules, api-conventions, ui-conventions -
tasks.md+_progress.mdKiro trackers -
docker-compose.yml+infra/scaffold — Postgres 16, Redis 7, MinIO, Mailpit - Gradle KDSL skeleton —
settings.gradle.kts,build.gradle.kts,gradle/libs.versions.toml, 13 empty modules (verified via./gradlew projects) - Quarkus app boots —
GET /q/healthreturns200 { "status": "UP" }; 6 @QuarkusTest assertions pass (PR #110) - Webapp boots — Vite dev, light/dark/system toggle, shadcn primitive, Lucide icons, 55 tests across 6 suites all green (PR #111)
-
.github/workflows/— ci-backend, ci-webapp, link-checker, codeql, release, pages, dependabot (all triggered and green on recent PRs) -
.github/templates — PULL_REQUEST_TEMPLATE.md + ISSUE_TEMPLATE/{bug,feature,question}.yml + config.yml -
docs/GitHub Pages landing (index.html+README.md) +self-hosting/hardening.mdplaceholder -
.claude/commands/—/new-phase,/release,/check-pr,/dogfood-strings -
git init+ initial commit + push tohttps://github.com/Pratiyush/translately - Branch protection on
master— PR required, CODEOWNERS review, signed commits, linear history, no force push, conversation resolution - CHANGELOG
[0.0.1]final entry + RELEASE-NOTES narrative (PR #113) - Tag
v0.0.1GPG-signed → release.yml fires → GitHub Release v0.0.1 published as prerelease with backend fastjar + webapp bundle assets
docker compose up -d # postgres, redis, minio, mailpit
./gradlew build # all modules compile
./gradlew :backend:app:quarkusDev & # boot Quarkus in dev
sleep 15 && curl -s http://localhost:8080/q/health | jq .
pnpm --filter webapp install
pnpm --filter webapp build # clean production bundlePass criteria: docker containers healthy; ./gradlew build green; /q/health returns UP; webapp bundle builds without error.
- Gradle + Quarkus + Kotlin multi-module boilerplate is the heaviest lift in Phase 0 — budget a full day for T008+T009.
- Signed commits require GPG key on the local machine; verify
git config commit.gpgsignand a working signer before T015.
Planned start: after Phase 0 ships.
- User / Organization / Project / Language / ApiKey / Pat entities + Flyway migration
- Email+password signup → email verify (Mailpit) → login; Argon2id hashes
- JWT access + refresh rotation
- Google OAuth + optional Keycloak OIDC profile
- Permission enum +
@RequiresScope+ org/project RBAC - API keys + PATs (hashed, prefixed)
- Multi-tenant
TenantRequestFilter+ Hibernate filter -
CryptoServiceenvelope encryption (skeleton for Phase 4 keys) - OpenAPI generated + checked in at
docs/api/openapi.json - Webapp: theme toggle +
⌘K+ app shell + signup/login/org/project pages - Auto-generated webapp API client
- CI e2e workflow against docker-compose stack
docker compose up -d
# UI: signup → verify email (Mailpit at :8025) → login → create org → invite user → create project → create API key → revoke API key
./gradlew test # JUnit + Kotest + Testcontainers
pnpm --filter webapp test # Vitest + axe
pnpm --filter e2e test # Playwright end-to-end- Key/Namespace/Tag/Translation/Comment/Activity entities + Flyway
- ICU MessageFormat parse + validate (icu4j) + CLDR plurals
- Bulk ops via Quartz
- Per-field activity log
- FTS search with
tsvector+pg_trgm - Translation table UX — CodeMirror 6 ICU, sticky col, keyboard nav, autosave, optimistic updates
# UI: add 5 keys with namespaces + tags → translate to 3 languages including plurals → verify activity log entries- i18next flat + nested JSON importer with conflict policies
- Filtered JSON exporter (by namespace, tag, state)
- Async via Quartz;
GET /jobs/{id}+ SSE - Import wizard + export modal
# CLI/UI: import sample i18next JSON → export filtered → round-trip diff is empty-
AiTranslator+ adapters (Anthropic Claude, OpenAI, OpenAI-compatible) -
MachineTranslator+ adapters (DeepL, Google, AWS) - Per-project provider config (encrypted at rest) + monthly budget cap
-
PromptBuilderwith glossary + tone + project context - Translation Memory via
tsvector+pg_trgm - "Suggest" per cell + "Translate selected" batch
- E2E: zero providers configured → "Suggest" UI absent, app fully usable
# Settings: no AI configured → "Suggest" buttons absent, app fully usable
# Settings: configure Anthropic key → "Suggest" appears → click → state=MACHINE_TRANSLATED
# Add similar key → TM panel suggests prior translation- Screenshot entity + S3 upload + key-position pinning
-
@translately/web— init / t / plural - In-context editor (postMessage, ALT+click)
- Demo Vite app dogfooding the SDK
# Upload screenshot → pin key → load demo app → ALT+click string → editor opens- Outgoing webhooks (HMAC, retries, delivery log)
- CDN bundles → S3 signed URLs, content-hash versioned
-
@translately/cli+ GitHub Action wrapper -
@translately/reactSDK - Glossaries (terminology tables + AI prompt injection)
# Configure webhook → edit translation → webhook.site receives HMAC-signed POST
# Configure CDN → fetch JSON via signed S3 URL
# CLI: translately push / pull against running stack- Translation Tasks (assignable, deadlines, progress)
- Translation Branches (long-lived, merge-back)
- SSO (Keycloak) + SAML (via OIDC adapter)
- LDAP (Elytron) + group→role mapping
- Granular per-language, per-namespace permissions + view-only
- Audit log (append-only, queryable, exportable)
- Helm chart (stretch: Figma plugin, MCP server)
- Migration tool (importer for incumbent localization platforms)
- Pre-launch QA — santa-method adversarial review, link audit, license audit, Lighthouse, axe, k6
# Configure Keycloak SSO → log in via SSO
# Configure LDAP → log in with LDAP creds
# Create task → assign → complete → verify audit log entry
# All Lighthouse scores ≥ budget; axe 0 violations; k6 load 100 rps sustained- 2026-04-16: Plan approved. Memories saved. Seed docs (README, LICENSE, CHANGELOG, RELEASE-NOTES, CONTRIBUTING) written. Third-party reference sources cloned into
_reference/(gitignored)..gitignoreadded. Top-level files (CODE_OF_CONDUCT, SECURITY, CODEOWNERS, CLAUDE.md, AGENTS.md) written..kiro/steering/complete. Trackers (tasks.md,_progress.md) in place. - 2026-04-16: Docker compose +
infra/scaffold. Gradle KDSL multi-module skeleton verified via./gradlew projects. 97 GitHub issues seeded (T001–T713) with type/scope/estimate labels + 8 phase milestones. MVP labels applied: 57 mvp / 37 post-mvp / 3 deferred (Figma plugin, MCP server, migration importer). - 2026-04-17: T009 merged (PR #110). Quarkus application runs end-to-end:
/q/health,/q/health/live|ready|started,GET /service metadata,/q/openapi,/q/swagger-ui. 6 @QuarkusTest assertions green. Fixed ktlint, CodeQL JS/TS gate, lychee forward-URL exclude list; split Quarkus convention plugin into app + library flavors. - 2026-04-17: T010 merged (PR #111). Webapp shell: Vite 6 + React 18 + TS strict + Tailwind + shadcn Button + ThemeProvider (light/dark/system with localStorage + OS reactivity) + Lucide + dogfood i18n wrapper. 55 tests / 6 suites all green, axe 0 violations in light AND dark. Fixed pnpm-action-setup version collision and GitHub-advisory 503 false-positive.
- 2026-04-17: Tracker consolidation (PR #112) — T009–T016 marked done, weekly log updated.
- 2026-04-17: T017 merged (PR #113). CHANGELOG
[0.0.1]+ RELEASE-NOTES narrative + version bump from 0.0.1-SNAPSHOT to 0.0.1 (gradle.properties, root package.json, webapp/package.json). Lychee future-URL regex widened to coverv0.0.1...master. - 2026-04-17: T018 done — v0.0.1 shipped 🟢. GPG-signed tag pushed (v0.0.1). release.yml workflow completed green. GitHub Release published as prerelease. 11 stale dependabot PRs (#98–#109) triaged and closed with a "re-raise if still relevant after Phase 1" note.
Phase 0 retrospective. 2-day bootstrap (vs. 2-day target). All 18 tickets closed. 4 feat/fix/chore/docs PRs merged (#110, #111, #112, #113) each with CI green and GPG-signed commits. 55 webapp tests + 6 backend tests cover the runtime pipeline end-to-end. No rules violated, no AI coauthor trailers, no AGPL paste, no unsigned commits. Ready for Phase 1.