I build AI agents
Build, operate, and ship agents that run for days in production. Yassine Ennaim, Agentic AI Engineer on Mastra and TypeScript, with 21 mobile apps shipped.
Agents. Workflows. Approval flows. Everything an agent needs to run for days in production, and someone accountable for it.
import { Agent } from "@mastra/core/agent";
export const writer = new Agent({
id: "content-writer",
name: "Content Writer",
instructions: brandVoice, // grounded in a company file
model: "openai/gpt-5.5-mini",
tools: { research, deliverables },
memory, // scoped by thread + resource
});
import { createWorkflow } from "@mastra/core/workflows";
export const dailyPack = createWorkflow({
id: "daily-content-pack",
inputSchema: z.object({ date: z.string() }),
})
.then(research)
.foreach(writeForPlatform, { concurrency: 3 })
.then(lint)
.then(budgetGate) // fails closed
.then(requestApproval) // suspends until Slack
.commit();
export const approvalCard = createTool({
id: "slack.approvalCard",
inputSchema: z.object({ post: postSchema }),
execute: async ({ context }) => {
await slack.chat.postMessage({
channel: APPROVALS,
blocks: card(context.post), // Approve · Skip · Edit
});
return { status: "awaiting-human" };
},
});
Logged 3 sports this week? That streak is worth 60 XP.
lint: pass · cost $0.0012 · image attached
export const mastra = new Mastra({
agents: { writer, analyst, condenser },
workflows: { dailyPack, revise, prune },
storage: new LibSQLStore({ url: "file:./team.db" }),
observability: new Observability({
exporters: [duckdbMetrics, traces],
}),
// monthly ceiling per resource, fails closed
processors: [tokenCostControl({ limitUsd: 20 })],
});
| # | run | tokens | cost | status |
|---|---|---|---|---|
| 1 | 2026-10-31 | 38,410 | $0.011 | published |
| 2 | 2026-10-30 | 37,902 | $0.010 | published |
| 3 | 2026-10-29 | 61,220 | $0.049 | budget gate |
| 4 | 2026-10-28 | 36,114 | $0.010 | published |
| 5 | 2026-10-27 | 39,007 | $0.011 | published |
export default function LogSport() {
const { mutate } = useLogActivity(); // Supabase RLS
return (
<Screen>
<SportPicker sports={SPORTS} /> {/* 55 sports */}
<Button onPress={() => mutate({ xp: 20 })}>
Log it in 20 seconds
</Button>
</Screen>
);
}
Agents
Typed agents with instructions grounded in a company context file, tool calling, and memory scoped by thread and resource.
Workflows
Deterministic steps with Zod schemas, retries and onError, budget gates, foreach over platforms, and human in the loop suspend and resume.
Tools
Tavily research, a deliverables store, Slack Block Kit approvals, and publishing rails for Telegram, X and LinkedIn behind requireApproval.
Observability
Every run traced, every model call metered in DuckDB, structured logs with secret redaction, and a spend cap that fails closed instead of open.
Mobile
21 client apps on the App Store and Play Store since 2019 with Expo, Flutter and FlutterFlow, and AI features inside the app.
Operated, not just shipped. Every run is traced, every model call is metered, and nothing publishes until a human presses Approve.
Selected work. Agents that reach real users, and the apps that got me here.
Autonomous marketing team for Fouz
Agents research, write and lint a daily pack for nine platforms at 06:00, generate on brand images from a locked reference sheet, and post approval cards into Slack. First live posts 8 September 2026.
Read storymodirna, a social media manager run by AI agents
Agents plan a post, review it against faith and craft checks, draw the image, render bilingual carousel slides, pause for the owner's approval, then publish to Instagram. Tokens in Supabase Vault, every run traced in DuckDB.
Visit modirna.comSuhba, a private Islamic companion app
Prayer times with daily check-ins, guided programs, small circles of companions, a shared khatma of the Quran and a weekly muhasaba. Free with Premium through RevenueCat, on iOS and Android, with a seven-language website. Its Instagram is run by modirna.
Visit suhba.winFouz, gamified sports app on iOS
Log any of 55 sports in 20 seconds, earn XP, keep streaks, climb city leaderboards. Anti cheat rules in Postgres, push notifications, App Store review passed. Live since 29 August 2026.
Visit fouz.appSterzo, convoyage platform for drivers, mobile and web
Mission matching and ranking by net euros per hour, insurance contracts with daily broker reports, Stripe billing, quote PDFs and plate recognition on Supabase edge functions, plus the plan that moves the product from no-code to code.
Visit sterzo.comRinkly, skating rink booking
Stripe Connect payouts, real time availability, digital waivers and QR ticketing for rinks and their skaters.
See on UpworkFlipaki, peer to peer rental marketplace
Inventory, encrypted chat, deposits and shop accounts for a two sided rental marketplace.
See on Upwork7akai, AI generated storybooks
Gemini writes the story, generates the images and narrates it, inside a children's reading app. Plus Meal, OpenAI pantry scanning and inventory.
See on UpworkCourtFinder, NurseRates, The Unique Piece
Dual app court booking with Xendit payments, a privacy first hospital rating app, and a vintage furniture marketplace with an escrow flow.
See on UpworkExperience
-
Founder and Lead Engineer, Fouz
Jul 2021 → nowShipped Fouz to the App Store and built the autonomous Mastra marketing team that runs it: agents, workflows, tools, Slack approval, scheduled content, image generation, tracing and spend caps on OpenAI and Gemini. Earlier, the NestJS microservices backend on GCP, Redis and PostgreSQL.
-
AI and Mobile Engineer, Freelance on Upwork
Aug 2019 → now21 client applications shipped, 100% Job Success, Top Rated Plus. Booking with Stripe Connect and QR ticketing, marketplaces with encrypted chat, healthcare and restaurant apps, and AI inside the app with OpenAI and Gemini.
-
Senior Full-Stack Developer, Casapplanca
Jun 2020 → Jul 2021Kapptain.com, a serverless marketplace for photography services, and the M2M mentorship platform on NestJS microservices, PostgreSQL, Redis and React.
-
Full-Stack Web Developer, Abweb Digital Agency
Mar 2015 → Aug 2019Built and maintained the Forbes Middle East website and its custom CMS, plus long running B2B platforms and a real estate marketplace serving thousands of concurrent users.