The problem you can hear
In Castelo Branco district, interior Portugal, the people who grow and make things speak Portuguese and are often over fifty. The people arriving with money to spend are French, German, Dutch, British, Brazilian and West African. Both sides want the same transaction. Neither can read the other's listing.
The existing answer is Facebook groups: nothing translated, nothing moderated, nobody able to take a card payment.
What Feira is
A local marketplace, live at https://feira.market, in five locales (PT/EN/FR/DE/NL), with a Stripe platform-as-merchant-of-record rail including MB WAY and Multibanco — the two rails that actually matter in Portugal and that almost no international marketplace supports.
A seller photographs an item. Gemini writes the listing. Gemini renders it into five languages at write time. Gemini classifies it for fraud, prices it when the seller has no reference price, and embeds it so search finds goods by meaning rather than keyword.
Nine Gemini engines deployed, eight with production traffic
| Engine | Model | Decision it makes | Evidence |
|---|---|---|---|
| vision | gemini-3.5-flash | photo → title, description, category, condition | 8 of 9 listings AI-drafted |
| translation | gemini-3.1-flash-lite | every listing into 5 locales at write time | 220 translation records |
| embedding | gemini-3.1-flash-lite | semantic search ranking | 100% of listings embedded |
| triage | gemini-3.1-flash-lite | fraud + toxicity classification | production rows |
| pricing | gemini-3.1-flash-lite | price estimate with no comparable | production rows |
| assistant | gemini-3.1-flash-lite | user-facing agent with tool actions | 2 calls, 1 user, 17 Aug 2026 |
| summarization | gemini-3.1-flash-lite | thread and dispute summaries | deployed, 0 calls |
Eight are exercised, not nine — summarisation has still never been called by anyone, and we would rather say so than imply otherwise. The assistant served its first production calls on 17 August 2026, the day of this submission.
Proof it runs in production
All counters below probed 17 August 2026.
- 396 Gemini API requests over 17 days, 371 × 2xx — Google's own Cloud Monitoring, not our count
- 174 logged AI operations, 174 successful (100%) across 13 active days, in our own
ai_usageaudit table — one row per call, recording feature, model, input and output characters - Total Gemini spend for the 28 days to 16 Aug 2026: €2.77
Every AI call passes through a single guard that enforces a per-feature kill switch, a pre-flight cost quota, retry with exponential backoff, and writes that audit row. There is one wired provider and one code path.
Gemini was measured, not assumed
Our build plan named a commercial translation API at €285.60/year; a live bake-off across five engines contradicted it on both quality and cost, and the decision record captures the reversal.
AI output is labelled, in public
Every AI-drafted listing carries a visible "Created with AI assistance" caption. Translated fields carry per-field AI badges in their own language. A "Show original" control returns any single field to what the seller actually wrote — per-field, so a translated description and an original title can be on screen together.
That is an EU AI Act Article 50 transparency posture built into the product, and you can verify it without an account on any public listing.
What is AI and what is human
Feira is operated by one person. Every function a five-language marketplace normally staffs is a Gemini call: translators, cataloguers, the first pass of trust-and-safety.
What stayed human is what should have: the written ruling on whether users' content may go through a cloud model at all, taken before the code shipped; payment-rail selection; legal copy in five languages; dispute outcomes; and liability when a transaction fails.
What this creates for people who are not us
Feira employs nobody. The AI layer substitutes for roles a marketplace normally staffs, so the opportunity it creates is the seller's income, not payroll.
In Portugal small-scale selling is informal by default; taking card means a merchant account, a reader and paperwork disproportionate to a stall. Because Feira is merchant of record, a seller takes card, MB WAY and Multibanco without it, and publishes in five languages without hiring anyone. The same barrier exists in Castelo Branco and in Accra, which is why the model travels.
So far: two seller accounts under three seller identities, all related parties, nine listings, one village — and no arm's-length buyer yet. Turning local interest into arm's-length demand is the next thing to prove.
Where we honestly stand
Demand arrived, and our own sign-in lost it. On 13 August a buyer near Fundão, fifty kilometres away, found a listing on Feira and messaged to buy it. She could not get through the sign-in — hCaptcha's free tier only runs "always challenge" — and she told us she "didn't get past the jumping cats in the app". We replaced it with Cloudflare Turnstile the same day: the commit records her lockout as the reason and production went live at 17:22 UTC. She never came back. She collected in person on 15 August and paid the seller in cash, so Feira earned nothing, and having never finished sign-up she appears in none of our user numbers. A redacted exhibit is in our evidence upload.
Three days later the rail carried the first completed order in the platform's history — €15.00, card, reconciled by webhook. Before it, the company's Stripe account had never processed a successful charge. That buyer was a family member, disclosed as related-party revenue and excluded from every customer figure. Arm's-length customer transactions: zero.
21 people have registered, 18 have signed in, 3 have produced anything. Supply is 9 listings from 2 seller accounts under 3 seller identities, all related parties, in one village. At this volume the AI costs more than the platform earns — €2.77 against €1.50 of commission.
We put two gates before growth: a penetration test, and a written data-locality ruling before any user content went through a cloud model. That order is defensible, and the lockout shows its price — the first stranger who wanted in could not get in, and that is now fixed. What this submission shows is a working machine with almost nothing yet flowing through it.
Built With
- cloudflare-turnstile
- gemini
- google-ai-studio
- google-cloud
- next-intl
- next.js
- pgvector
- postgresql
- pwa
- react
- sentry
- stripe
- stripe-connect
- supabase
- tailwindcss
- typescript
- vercel

Log in or sign up for Devpost to join the conversation.