Fora
i18n as
infrastructure.
Translate text and images at write time. Your read path has zero overhead — just query posts_localized.
Live demo
Try it now.
No account required. Results are real.
JPEG or PNG with visible text. Must be publicly accessible.
Result will appear here
This is the real API. No mocks.
Get your own API key →name: my-appconnection_string: postgres://...config:target_locales:- es- fr- de- pt-BRcreate_views: truetables:- table: postsid_column: idfields:- title- body- table: productsid_column: idfields:- name- descriptionimage_fields:- hero_image_url
How it works
Four steps from zero to fully localized.
Deploy fora-agent
A single binary that runs alongside your app. Point it at your Postgres and drop in a fora.yaml.
docker run ghcr.io/getfora/fora-agent config.yaml
Define your tables
Declare which columns to translate and which image fields to inpaint. No schema changes required.
tables:
- table: posts
fields: [title, body]Content translates automatically
The agent syncs new rows to the Fora API. Text goes through Gemini Flash. Images are inpainted with translated text in place.
Query as normal
Set the locale once per request. Your existing queries work unchanged — just hit the localized view.
SET LOCAL fora.locale = 'fr'; SELECT * FROM posts_localized;
Pipeline
Your Postgres
source of truth
fora-agent
reads fora.yaml
Fora API
POST /translate
Gemini API
text + images
fora_translations
synced back to your DB
Principles
Designed for teams that ship.
Write-path, not read-path
Translate once when content is written. Every subsequent read — across all locales — is a simple indexed query. No latency tax at serving time.
Your data stays yours
Translations land in a fora_translations table in your own Postgres. No external dependency on the critical read path. Pull the plug on Fora and your translated content persists.
Text and images, unified
UGC is never just text. Image inpainting replaces embedded text inside images — product shots, banners, screenshots — in the same pipeline, same job.
Zero code changes
Locale-transparent views mean your existing queries work unchanged. SET fora.locale once per request. Every downstream SELECT already works.
Idempotent by design
Jobs are content-addressed. Re-running the agent never creates duplicates. Partial failures replay safely. The system converges.
Observable
Every translation job, webhook delivery attempt, and image upload is logged and queryable. When something breaks, you have the receipt.
A note from the founder
Every engineering team I've talked to at growth-stage companies has the same deferred problem: localization. It's always the thing that gets pushed to the next quarter. Too complex to build well, too important to ignore forever.
The existing tools assume you have a dedicated i18n team and a content management workflow. Most teams don't. They have engineers who need to ship a LATAM launch in six weeks.
Fora is the infrastructure I kept wishing existed. Instrument one endpoint. Get translations in production. Move on.
Early access
We're looking for design partners.
If your team is expanding to new markets and you'd rather ship than build a translation pipeline, we want to work with you directly. Free while in early access.
Talk to us →Roadmap
Built in public.
This is the current state and what we're building next. No hidden backlog.
Shipped
- ✓Text translation — ES, FR, DE, IT, pt-BR
- ✓Image translation + inpainting
- ✓Postgres connector (fora-agent)
- ✓Locale-transparent views
- ✓Webhook delivery with exponential backoff
- ✓Free tier with usage enforcement
- ✓S3-compatible image storage
Coming
- ○CJK support (Japanese, Korean, Chinese)— complex font rendering
- ○RTL language support (Arabic, Hebrew)— layout reflow
- ○SDK packages (npm, pip)— REST + examples covers v0.1
- ○Translation memory + glossary— terminology enforcement
- ○Web dashboard— operators use DB directly for now
- ○Batch historical migration endpoint— for existing content
- ○Human review workflow— quality-gating layer