Loading video...
Video Failed to Load
Introducing AI Concierge Agent: built with Flutter's latest generative UI (genui). ✅ LLM-driven Flutter app ✅ GPT-4o-mini (thru ) ✅ Cloudflare Workers + Vector ✅ Hono server on DigitalOcean VPS (ATL) This is HUGE! I love it!
33,372 views • 9 months ago •via X (Twitter)
43 Comments

Twitter butchered the video quality but LinkedIn did a little bit better. Watch it there if you want:

It can also handle normal FAQs and it misinterprets questions some times. But at least it’s consistent in both interfaces 😂😂😂 I gotta fix the broken markdown stream or find a better package.

It can fetch and show ports that users can interact with. I have 17 custom catalog components that the LLM can choose to render but I need to do a better jobjob at differentiating cruise and port cards.

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean Good work! Any feedback you would like to share about your experience? Maybe better yet, join us here:

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean Thanks, bookmarked for future. No feedback so far. No issues.

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean Good to hear. Hit us up in our Discussions if you ever want to chat or share feedback. Keep hacking!

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean Impressive stuff Khalid!

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean Thanks 🙏

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean I love the way each component are being generated, they look amazing. GenUI 🚀

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean Same. I thought it can’t possibly be this easy or good but it was.

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean So cool!!!!! How did you set up the openAI connection? did you create your own custom ContentGenerator? How did that all feel?

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean Thanks, and yes I’m using custom content generator to override methods but implemented history my own way (not ideal). I’m also using Cloudflare Worker to call OpenAI models using OpenRouter api along with handling vector, embedding, rate limiting, sessions, etc.

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean AI helped a lot to get here even though I struggled to grasp how different layers and systems come together. Wasn’t easy (for me) to say the least. But it eventually worked as expected.

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean That’s awesome! Which AI coding tools were you using? And how fast were you able to get this all working together? Also - I hear you on all the layers - I don’t think it is just a you thing . It took me a bit to grasp how everything interacted together when I first started

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean My beloved Cursor running Opus 4.5 while consulting Chaptgpt 5.1 on the side. They guided and misguided me a lot tbh. It’s easy to deviate from the right narrow path. I went down the wrong holes couple of times before finally getting it right.

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean For example, Opus added an adapter that manually transforms LLM output into A2UI instead of giving the LLM render tools. Took me a minute to catch this. All agents went with this approach and wanted to make the adapter the “reasoning” layer instead of the LLM.

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean i switched to gpt-4.1mini and results were supritsingly similar but i havent tested much

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean LLMs behave the same if you get the constraints and data source right.

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean how did you screen record this?

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean I caved in and bought @screenstudio

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean @screenstudio 😭bro said he caved... cool app btw

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean @screenstudio I really tried not to and looked around for alternatives but nothing compared. Not even close. So I had to make the rational decision

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean @screenstudio I might join the bandwagon soon

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean @screenstudio This was my first video with it. Completely impressed with it.

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean Awesome! 👏🏾

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean yeah, so this is like very very cool. would love to hear if you have feedback or thoughts of where you'd wish the genui package could go and what it's missing. we're actively exploring similar spaces and trying to see how far it can go :)

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean Thanks, but tbh I don’t know what feedback to give. So far so good. No issues. Will let you know if that changes.

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean Flutter, love to see it

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean 💯💯

@FlutterDev @OpenRouterAI @Cloudflare @honojs @digitalocean the DO VPS combo for AI agents is underrated. low latency + managed infra lets you focus on the agent logic instead of babysitting the server. how's the memory holding up under load?

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean 🤯🤯🤯🤯🤯🤯🤯🤯🤯🤯🤯🤯

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean I was surprised how well it works too. Future is bright.

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean Insane results 👏👏👏

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean Thanks 🙏

@FlutterDev @OpenRouterAI @Cloudflare @honojs @digitalocean the combo of cloudflare workers + DO VPS for hosting is interesting. how's the latency been on the concierge responses?

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean Looking nice work When it is coming into production?

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean Thanks but I don’t know tbh. Sourcing reliable data is a huge pain point and this project has no path to monetization.

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean This is actually pretty cool.

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean I see videos like this and I’m like “how do I even get to this level”? Looking nice 🔥

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean Practice. Lots of iteration.

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean Hey can you share code please

@KhalidWar @FlutterDev @openrouter @Cloudflare @honojs @digitalocean Impressive stack. How do you differentiate cruise vs port cards in the LLM prompts? Any edge caching wins for snappy searches?

@FlutterDev @openrouter @Cloudflare @honojs @digitalocean I supplied the LLM with different render tools, data source, and system prompts. Logically port and cruise aren’t the same so the lllm can reason about it. No caching or optimizations of any kind yet. But I can edge cache popular ports and cruises and FAQs.
