Data Analyst // SQL · Python · Power BI // Data Pipelines & Automation
// 01 — FEATURED BUILD
MI ASISTENTE
REAL-TIME VOICE AI COMPANION · LANGUAGE COACH · WINDOWS
A desktop voice assistant I talk to through my earbuds. It streams audio to the
Gemini Live API (or the OpenAI Realtime API) over WebSockets, answers in a
natural voice and can be interrupted mid-sentence. Its listener modes stay silent during meetings and only
whisper a correction when someone says something false, a neutral counterpoint to sweeping opinions, or a
useful fact, checking Wikipedia before correcting.
It's also the perfect partner to learn English, Spanish, Portuguese or Japanese: it talks
with you in the language, corrects your mistakes on the spot and saves them so you can review them later.
LIVE_FEED // mi-asistente.exeREC
4languages to learn
30selectable voices
11memory folders
7personality modes
> capabilities
Real-time speech-to-speech with server-side voice detection, barge-in and automatic session resumption
Language-coach modes for English, Spanish, Portuguese and Japanese that correct mistakes as you speak
Fact-checker modes with Wikipedia lookups, and Google Search when the API plan allows it
Long-term memory in SQLite organized in folders (agenda, music, learning…), searchable by voice and in the app
Editable personalities as Markdown profiles, 30 voices, sleep mode and global hotkeys
Warm light/dark desktop UI built with customtkinter
Scripted server-event tests for interruptions, tool calls and reconnects, all offline with Pytest
> stack
PythonasyncioGemini Live APIOpenAI Realtime APIWebSocketsSQLiteNumPysounddevicecustomtkinterPytest
> free demo // windows 10-11 // 41 MB zip // unzip and run Mi Asistente.exe. Use earbuds. If Windows says "protected your PC", click More info → Run anyway.
// 02 — IN PRODUCTION
HAGOTEK
AV & SECURITY INTEGRATOR · CHILE · CO-OWNER & SOLE DEVELOPER
Hagotek is a Chilean company that designs and installs audio, video, electronic security and smart
lighting systems across the country. I'm one of its co-owners, and I built its two pieces of software
on my own: the public website and the ERP the company runs on.
02.A Website
A bilingual Spanish / English site with a page for each service and a direct WhatsApp line
for quotes. Static, built with Astro, deployed on Netlify and with a sitemap
for search engines.
A private web app that covers the whole commercial cycle: a quote becomes a sales order, the order produces
dispatch notes and invoices, and every tax document is issued electronically to Chile's tax service
(SII). The team uses it every day. Its data is real client information, so instead of
screenshots, this is how documents flow through it:
01Quote
02Sales order
e-documents
DTE 52Dispatch note
DTE 33Invoice
↳
DTE 61Credit note
Tax serviceSII
3SII e-document types
8business modules
5user roles
24data models
> capabilities
Quotes and sales orders with per-line cost and margin, and prices in CLP or USD per product
Electronic invoices, dispatch notes and credit notes issued to the SII through the Soluciones Market DTE engine, with RUTs and SII field limits validated before emitting
Dispatch notes that discount stock, purchase orders with goods receipt, and low-stock alerts
Projects with tasks and attachments, plus a draw.io-style editor for AV and network connectivity diagrams
Expenses by cost center, VAT and profitability reports, and a dashboard with sales rankings
Five roles with server-side permission checks, account lockout after 5 failed logins and encrypted backups
A staging copy of production that blocks real tax documents, for testing changes safely
Chile's public institutions buy through Mercado Público, the state procurement platform.
Paid platforms sell tender alerts as a monthly subscription; this one is built into the ERP and tuned to
exactly what Hagotek installs. Every morning a GitHub Actions job pulls the open tenders,
scores the ones it hasn't seen yet and keeps the relevant ones. Unlike the rest of the ERP, this module only
works with public data, so it gets a real screenshot:
LIVE_FEED // tendersDAILY SYNC
> tap / click to open full size
> how it decides
Weighted keyword rules for five categories (audio, audiovisual, CCTV / security, access control, automation); a match in the title or description weighs more than one buried in the item list
The UNSPSC product codes of each item add to the score
Filters out tenders that only match by shared words (security guards, medical hearing aids…) and one-off event rentals
Flags the ones that include on-site installation, not just shipping boxes
Keeps tracking saved tenders after they close, to see whether they were awarded or declared void
Emails a morning digest of the new matches through Resend, with HTML built to render in Outlook
In the ERP: open / following / discarded views, category and installation filters, search, and a status for each tender from New to Bidding to Won or Lost
Deliberately simple: hand-tuned rules refined by checking what gets in and what doesn't, not a model