Inspiration
I am a student developer, and SACHIN started from a very personal idea: what if everyone had a friend, mentor, and guide whenever they needed one?
There were times when I wished I had someone who could guide me, teach me, listen to me, and help me move forward. That experience inspired me to build the kind of companion I once wished I had.
I named the project SACHIN after myself because I have a simple dream: if this project reaches people, I hope one day I will have friends around the world simply calling me "SACHIN."
I also wanted a companion people can actually trust. Many AI tools send everything to a cloud provider and remember things without asking. I wanted SACHIN to be private, honest that it is an AI, and to remember only what the user chooses.
What it does
SACHIN is a personal AI companion for conversation, learning, coding, goals, and daily guidance.
- Private local AI chat: Powered by Ollama and Qwen3. Chats, memories, goals, and transcripts are processed on the user's own computer, with no API credits and no AI API key.
- Five conversation modes: Friend, Teacher, Coding, Coach, and Daily, with configurable answer length and saved Voice / Message / Smart response preferences.
- Memory Vault with consent: Personalization is off by default. SACHIN suggests notes, but nothing is saved until the user presses Save to Memory Vault. Users can edit, pin, categorize, and delete memories. A "don't remember this" message is never saved.
- Voice interaction: Voice starts only after a user action and microphone permission. Browsers with Web Speech use browser recognition; otherwise the recording is converted to WAV in the browser and transcribed by a local Ollama speech model. Audio is never written to disk.
- Always-accessible widget: A floating in-app launcher, a standalone widget page, an installable PWA with a widget shortcut, and an optional always-on-top Electron desktop companion.
- Goals dashboard: Goals with due dates, completion, and deletion.
- Optional wake phrase: User-controlled, works only while the app tab is open, visible, and focused.
- Subscriptions with RevenueCat: A free plan and SACHIN Pro, with a RevenueCat-managed paywall.
How I built it
SACHIN is a full-stack application with a clear separation of responsibilities.
- Frontend: HTML, CSS, and JavaScript, served as an installable PWA (manifest and service worker) with onboarding, dashboard, chat, Memory Vault, settings, and a standalone widget page.
- Backend: Node.js 20 and Express. Every request is authenticated with a signed JWT, and every database read and write is scoped to that user. Passwords use bcrypt hashes, and sign-in is rate limited.
- Database: MySQL. An initializer creates the database, applies the schema, adds missing columns, and runs a one-time memory-consent migration.
- AI layer: For each message, the server builds a prompt from the selected mode, response preference, the 16 most recent messages, relevant approved memories, and active goals. It sends the prompt to the local Ollama service (Qwen3 0.6B) and stores the completed turn in MySQL.
- Voice: Web Speech where available. Otherwise a 20-second recording is converted to 16 kHz WAV in the browser, held in memory by Express, and transcribed by a local Ollama speech model. A short-lived, one-use reservation enforces the free plan's five voice turns per UTC day.
- Desktop: An Electron companion starts or reuses the local server and opens the widget in a compact always-on-top window (Ctrl+Shift+S reopens it).
- Billing: The RevenueCat Web Billing SDK and a RevenueCat-managed paywall handle checkout. A secured webhook updates the plan in MySQL, and the webhook is the only authority for Pro limits.
- API: A REST API covering auth, chat, voice transcription, memory, preferences, conversations, goals, billing, and health checks.
Challenges I ran into
- Learning while building: I had to learn authentication, database migrations, voice handling, and billing webhooks at the same time as using them.
- Making privacy real: Consent changed how memory works. Suggestions are stored as unapproved, excluded from AI context until approved, and never saved when the user opts out of a turn.
- Voice across browsers: Web Speech support is inconsistent, so I built a fallback that records, converts to WAV, and transcribes locally without storing audio.
- Being honest about limits: Reliable wake-word detection after the tab closes needs an on-device wake-word engine. Instead of overpromising, I built what works reliably and documented what does not.
- Trusting billing correctly: Access is granted only after a verified webhook, not when the browser says a purchase succeeded.
- Integrating everything: Keeping the frontend, Express API, MySQL, Ollama, Electron, and RevenueCat working together as one simple, reliable product.
Accomplishments that I'm proud of
- Building a complete, working product as a student: accounts, private AI chat, voice, memory, goals, widget, desktop companion, and subscriptions.
- Running the AI fully locally, so conversations never leave the user's computer.
- Designing a consent-first Memory Vault where the user always decides what is remembered.
- Delivering voice input without ever saving microphone audio to disk.
- Integrating RevenueCat with a secure, webhook-verified plan system.
- Documenting the product's limits instead of hiding them.
What I learned
I learned about AI integration, running local models, API design, authentication and security, database design and migrations, frontend and backend architecture, browser voice handling, PWAs, Electron, subscription billing, and product thinking.
Most importantly, I learned that trust is a feature. Consent, privacy, and honesty about what an AI can and cannot do shape a product as much as the technology does. I also learned that building is not about getting everything right the first time, but about debugging, testing, and improving until the idea becomes real.
What's next for SACHIN
- A native mobile home-screen widget
- Closed-app wake using an on-device wake-word engine
- Better local models and voice quality as small models improve
- Deeper learning and goal-tracking features for students
- A hosted, secure deployment so anyone can try SACHIN without local setup
I started by building SACHIN for myself. My dream is to build it for everyone. And if people around the world one day say "Hey SACHIN!", I will know I built something that gave my idea a chance to reach people, connect with them, and perhaps make a few friends along the way.
Built With
- ai
- api
- css
- development
- express.js
- full
- html
- intelligence
- javascript
- machine
- mysql
- node.js
- ollama
- personal
- pwa
- qwen
- recognition
- rest
- revenuecat
- speech
- stack
- student
- voice
- web

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