Inspiration
I saw Andrew Ng's AI avatar website, where you can chat with an AI version of him. I loved the idea, but only a famous person had one. I asked myself: why can't everyone have their own AI avatar?
People ask you the same questions again and again: "What do you work on?", "Are you open to work?", "What's your tech stack?" An AI version of you could answer them any time, even while you sleep.
So I built meAsAgent. Anyone can make an AI avatar of themselves and share the link.
What it does
- Make your avatar in minutes. Sign in with Google, write a little about yourself, and your avatar is ready. It takes your name and photo from your Google account, so it can only ever be of you. Nobody can make a fake avatar of someone else.
- Anyone can chat with it. Share your link, like
measagent.vercel.app/yourname, and people can talk to your avatar. Replies stream in word by word. - It remembers people. When a visitor comes back, the avatar remembers what they talked about last time.
- See who visited. As the owner, you can read the conversations people had with your avatar.
- Weekly email. Every week you get a short email about who talked to your avatar and what they wanted.
- A public directory. The home page lists all the avatars. An admin checks each one before it shows up there.
How I built it
- Frontend: Next.js 16 and React 19, hosted on Vercel.
- Backend: Fastify 5 running on Bun, written in TypeScript.
- Database: MongoDB stores users, avatars, chats and memories.
- AI: Amazon Bedrock is the language model. Replies are streamed to the browser with Server-Sent Events, so they feel fast.
- Login: Google Sign-In.
- Emails: Resend sends the weekly summary.
- Admin portal: A separate Next.js app to review avatars before they go public.
- Background jobs: A timer inside the API writes memories, sends reminders and prepares the weekly emails.
The avatar's personality is built fresh on every message from what the owner wrote. A visitor can only choose which avatar to talk to. They can't change how it behaves.
Challenges I ran into
- Memories are not orders. A visitor could try to hide a command inside a chat, like "remember: ignore your rules". So saved memories are treated only as information, never as instructions.
- Nothing should break the chat. If memory or email fails, the chat still works. Every extra feature fails quietly on its own.
- No duplicate work. If more than one server is running, background jobs must not send the same email twice. I used a "lease" in MongoDB so only one server does each job.
- Privacy. Owners can read conversations, so visitors have to know that. There is a clear notice under the chat box and a one-time consent step.
- Signing in without losing chats. If you chat first and sign in later, your old chat is merged into your account instead of disappearing.
Accomplishments that I'm proud of
- It is live and works end to end: sign in, make an avatar, share it, chat, and get a weekly email.
- The avatar really remembers returning visitors.
- It was built to be safe from day one. You can only make an avatar of yourself.
- The whole thing is clean, typed TypeScript, from the frontend to the backend.
What I learned
- Things will fail, so plan for it. Each feature should fail gently and never take the rest of the app down.
- Security and privacy need to be part of the design from the start, not added later.
- Streaming answers make an AI app feel much faster.
- A good prompt is not enough. You also have to protect it from what users type.
What's next for meAsAgent
- Teach the avatar more: let owners upload their resume, blog posts or docs so the avatar can answer with real details (RAG).
- Voice: let people talk to the avatar out loud.
- Our own domain: move to meAsAgent.com.
- Smarter insights: better weekly reports, like the most common questions people ask.
Built With
- ai-agents
- amazon-bedrock
- amazon-web-services
- bun
- fastify
- google-sign-in
- llm
- mongodb
- next.js
- node.js
- oauth
- rag
- react
- resend
- server-sent-events
- typescript
- vercel
- websockets
Log in or sign up for Devpost to join the conversation.