Inspiration
Two months ago, I thought I should build some AI tool for journalists, especially Arabic journalists. So I built a prototype as a journalist who is just learning vibe coding. But in June 2026 a journalist in Egypt tested an early build and asked the question I had no answer for:
"Why should I use your app instead of ChatGPT? I mean, I can do that in ChatGPT easily."
She was right, and Onwan exists in its current form because of it. I had to turn it into an editorial assistant for journalists, inside Google Docs™.
Independent journalists do the same unpaid work before every story: turning an idea into a defensible proposal, organising desk research, planning fieldwork, structuring a draft, checking claims against sources. Staff journalists have an editor for this. Freelancers, and almost everyone working in Arabic, do not.
What it does
Onwan is a Google Docs add-on that writes editorial work directly into the tab you already have open.
Seven actions, all live in production:
- three angle options for a raw idea
- an editor-ready proposal with numbered reporting questions
- dated desk research with source types and certainty labels
- a fieldwork plan with source categories and interview questions
- a story framework
- a non-destructive draft review
- a claim check with real, grounded sources
The interface is Arabic and English, and editorial output follows the language of the project, not the language of the interface. An Arabic story gets Arabic work even with an English sidebar. That is the thing most tools get wrong for Arabic users.
How I built it
- Google Apps Script add-on for the sidebar and document writing
- Cloud Run + TypeScript/Express backend
- Gemini 3.6 Flash on Vertex AI — not the Developer API, because Vertex does not train on customer content
- Firestore for entitlements and usage, Secret Manager for the identity salt, Firebase Hosting for the site
The model is constrained rather than trusted. Every response is validated against a JSON schema. Certainty labels are a closed enumeration — source_supported, reported_claim, conflicting, unverified — and the model is instructed never to mark its own statement "confirmed". Rules that cannot be expressed on the wire are stated in the prompt, restated in the schema description, validated in code, and given exactly one corrective retry.
Two actions call Google Search grounding and return real source URLs.
Challenges I ran into
I faced some technical errors, such as Google Search grounding, Vertex rejecting and Firestore configuring. However, the big difficulty was choosing the business model. First, I made as a Saas app, but I decided to make it just free for journalists in order to empower journalism and democracy, hoping that it can keep it running for free thanks to grants and programs, as it secured 500 eur from DW Akademie’s Media Loves Tech. So withdrawn Stripe and Pro plans before any live charge. Now Onwan is free for all journalists.
Accomplishments that I'm proud of
I think I can be proud that I built a useful working app for journalists, even though I am not a Coder. Hoping it will help journalists in their workflow.
And DW Akademie selected Onwan for the incubation phase of MEDIA LOVES TECH 2026, and the first gate has been achieved.
What I learned
The most useful thing anyone said about this product was a rejection of its premise. "I can do that in ChatGPT" was not an objection to answer with a feature — it was the specification. Everything that makes Onwan defensible came from taking it literally.
The second lesson was about prioritizing public interests instead of the profit model, especially journalism now suffers from support and resources especially in the South World.
What's next for Onwan
- Publishing the Onwan Ad-Doc on Google Workspace Marketplace, currently it’s in review.
- Marketing the app for journalists to try it in their professional works.
- Develop the app based on the feedbacks
- Finding resources to keep the app running for free, because it’s based on the public interest model not profit model.
Built With
- express.js
- firebase-hosting
- firestore
- gemini
- google-apps-script
- google-cloud-run
- google-docs
- google-workspace-marketplace
- html
- javascript
- oauth2
- secret-manager
- typescript
- vertex-ai
- vitest
- zod
Log in or sign up for Devpost to join the conversation.