Juan Manuel Cornejo
Designer | Quito, Ecuador · Americas, UTC−5
Open to full-time remote
Product, web, and a little bit of brand too. 23 years in.
From industrial control rooms to human rights databases, from SaaS platforms to ML interfaces.
Old school craft, new school tools.
Using AI for everything it's actually good at.
I code. Not as a hobby. The products on this site run on what I build.
Experiencing life, sometimes with a camera.
A macOS desktop app built with Electron to import photos & videos from cameras and SD cards.
Canceled Adobe, so no more Lightroom Classic. I missed the way it imported photos, so I built my own.
Download from GitHub Releases. macOS only.
git clone https://github.com/juanmnl/importer.git cd importer && npm ci npm start # dev mode npm run make # build DMG + ZIP
Node 20+ · macOS · TypeScript + Electron · MIT License
Shipped and in use; it's how photos get off my cameras. Open source under MIT, builds on GitHub Releases.
Brand and design system consulting for Uwazi v2, the open-source human rights documentation platform by Huridocs, used by 150+ organizations worldwide. Engaged November 2025 to January 2026.
A tribute to the people who do the work of memory: archivists, researchers, and the materials they've worked with for centuries. Paper, ink, the impression of a letterpress. Calm and editorial by default, color held back for where it counts.
Uwazi is one codebase serving 150+ organizations, from large legal teams to two-person archives, many of them non-technical and working in hard conditions. A loud brand would have fought the content, which is often evidence of the worst things people do to each other.
So the system gets out of the way. Editorial by default, monospace for the record, color held back for the few places it has to mean something. The letterpress idea gave it a reason to be quiet without being cold.
The harder constraint was that it had to survive being implemented by other people. It ships as tokens and patterns a small open-source team can hold in their heads and apply without me in the room.
The logo is the wordmark above. These are the marks that stand in for it when the wordmark cannot.
Named for the press. Three for ink and stamp, three for paper stock.
Roboto Mono carries the wordmark, a quiet nod to monospaced records. Inter does the day-to-day reading.
The rebrand extends past the logo into a full art-directed visual language, an homage to print, ink and paper.
The brand carried through to the surface people actually use.
Live as the brand and design system for Uwazi v2. In daily use across 150+ organizations documenting human rights work worldwide. Engaged November 2025 to January 2026.
Mantel is a white-label operations platform for restaurants and bars in Ecuador. Waiters fire the order from their phone, the kitchen sees it on screen, and every sale goes out invoiced with the SRI built in. A public website with a QR menu and online reservations comes included. One system to run the floor on a Friday at 8pm.
Software the way it should be: made to fit your room, not a system that does everything halfway. Mantel is the one place the whole night lives. And it's yours, not an account shared with a hundred other restaurants. Your own instance, in your color, your logo, your domain. El Encanto in Quito is customer zero.
A restaurant in Quito runs the night on five things that don't talk to each other: a POS rented by the month, a separate portal for the SRI billing, a WhatsApp thread for reservations, a printed menu that's wrong by Friday, and a notebook for the count at close. Nothing reconciles. The owner finds out what happened on Saturday, not during.
Most software sold here is the opposite of help: one shared cloud account, a hundred venues deep, built for none of them. You bend your room to fit the system.
I built Mantel the other way around. One instance per venue, the whole night in one place, the SRI billing inside it instead of bolted on. The bet was that an owner would rather run their own system in their own brand than rent a seat in someone else's. El Encanto proved it out as customer zero, and it's now going to other rooms.
Ten areas, each a live view of the same night.
Live prototype views from the system: floor, kitchen, inventory, menu, billing, and the white-label theming.
Three steps, no eternal migration.
Running in production in Quito. El Encanto is the first venue on it, customer zero. In active build and being offered to other restaurants and bars, July 2026.
Source on GitHub.
A wine garden in Quito. Built around small-grower bottles, food made for the table, and an outdoor garden that doubles as the dining room.
A full engagement: name, brand, strategy, the website at elencanto-uio.com, on-site pieces (menus, signage, the little stuff that touches a guest), social media and photography for the place, and the operations app the team uses to run service.
A warm dark room. A hand-drawn mark in cream like ink on a coaster. Wine first, then the food that goes with it, then the garden that holds both. Everything tuned to feel like a table you sit down at, not a brand you scan.
A mark and a wordmark that name what the place is.
Wine country at dusk. Deep browns and grass green hold the room. Gold and beige are the candlelight. Accent red is for the bottle you want to remember.
Arboria in two weights for the words, Lindsey for the handwritten touches: chalkboard specials, a flourish on a card.
Photography from the place: the house, the corridor, the garden.
The team at El Encanto needed something to run service. I'm building it with them.
The first version is small on purpose. The host takes orders on whatever device is nearest. The kitchen gets a printed ticket and marks it done. The floor watches the state from the same screen. Nobody has to cross the garden to ask where an order is.
Building from scratch means we can shape it to the room instead of fitting the room to someone else's POS.
The whole flow, start to finish: a waiter takes the order, the kitchen sees it, the table sees a bill, the night closes out.
Brand and site are live. Operations app is in active build, July 2026.
A Mac app I'm building for the way I actually work. I run two or three Claude Code sessions at once, often on the same repo, each one delegating to subagents. In separate terminals that means constant window-switching, no view of who delegated to whom or what any of it costs, and agents tripping over each other's changes.
Operator is the place I launch and watch them from. Each session runs in its own embedded terminal, every tool call and subagent shows up live on a timeline, and each agent works in its own git worktree so nothing collides.
The first instinct with a tool like this is to wrap the agent: proxy its traffic, install a runtime, own the session. I didn't want that. The moment Operator becomes something you install into the loop, it can break the loop.
So it stays a pure observer. It pins each session's id at launch and rebuilds the timeline from Claude Code's own transcripts. Nothing is installed, there's no global config, and if Operator isn't running the agents work exactly as before. Permissions are the one place it can step in, and only through an optional hook you choose to add.
.claude/agents/*.md. The point is choosing which model runs each agent (Haiku for extraction, Sonnet for general work, Opus for hard reasoning) with cost and speed hints right where you pickCmd+K. Cmd+N for a new session, Cmd+1–9 to switch. Drop an image on the window to paste its path, click a link in the terminal to open it
Operator pins each session's id at launch (claude --session-id <uuid>) and tails its transcript to rebuild the timeline live, so it stays a pure observer of the sessions it starts, with nothing installed and no global config.
Permissions are optional. Install Operator's hook and each tool use gates through an inline prompt before it runs. The hook only acts on sessions Operator started; it keys on the OPERATOR_TERMINAL_ID env var injected into each terminal, so a claude you run yourself in iTerm or VS Code hits it but exits immediately. With no hook installed, Claude Code works normally.
React 19, Vite, and Tailwind on the front, a Tauri 2 (Rust) backend behind it. portable-pty with an xterm.js WebGL renderer for the embedded terminals, a transcript tailer for the timeline, and an optional tiny_http server for the permission hook.
In active build, at v0.8 as of July 2026. The source is private, but signed macOS builds are public.
An interactive terminal in a browser. Type commands to move through the site, change themes, or load a game. The whole thing pretends to be a CRT from 1985 and most of the time you forget it isn't.
A tribute to my first computer, a Commodore 64, and to the command lines I grew up reading.
The portfolio routes you can navigate by command or by URL.
Also: skills, contact, and cv. Type the name or click a menu item.
Type the name at the prompt and play. The frame stays in character.
Six to choose from: blackvoid, crt, hydra, mr-pink, synthwave, and untitled. Type theme at the prompt to cycle, or pick one by name.
Vite + vanilla TypeScript. SVG filter for the CRT barrel distortion. CSS scanlines and color tokens per theme. No frameworks.
Live at terminus.juanmnl.com. Done and playable; it gets a new game or theme when the mood strikes.
A fasting tracker for the Apple Watch. I fast most days and wanted something that lived on my wrist: start a fast, glance at the ring, see what my body is doing, and log it without reaching for my phone. Most fasting apps are bloated and want a subscription. This one does one thing.
The logo doubles as the interface: the mark fills bottom-up as the fast runs, so it reads the second you raise your wrist. Pick a preset, watch it fill, and learn what your body is doing in each phase as the hours pass.
Every fasting app I tried wanted an account, a subscription, and my phone in the loop. A fast is a start time and a goal; the tracker should live where the glance happens. So Fastrack is watch-only by design. No iPhone app, no accounts, no analytics, nothing leaves the device.
The other bet was making the brand do the work. The mark, stacked bars clipped to a circle, is the app icon, the complication glyph, and the progress gauge itself. One shape carries the whole app.
The physiological milestones the app surfaces while a fast is running.
Monochrome, derived entirely from the logo: black, white, and greys on a pure black canvas with a subtle film grain. Liquid Glass surfaces for the controls, SF Rounded throughout. Secondary actions live below the fold, so the gauge always owns the screen.
SwiftUI on watchOS 26, standalone, so it runs without the phone. Swift Charts for the trends, HealthKit for an optional weight log, local notifications for the reminders.
In active build, July 2026. Private repo for now.