Some of these are gaps I found and decided to fill. Some are things I built to understand something. All of them are mine.

My consulting work lives at Socialomical. My art lives at salinamendoza.com. This is everything else.

Selected work

SuiteOrganize Event management + QR check-in for events mainstream platforms won't host + more
suiteorganize.com ↗

Built for events under 100 people — cannabis events, underground arts, community gatherings, anyone mainstream platforms redline. Full event creation, public registration, QR check-in, organizer profiles, and offline sync for venues with bad connectivity.

The offline-first check-in was the hard part: IndexedDB + a lean service worker so the whole thing works when the WiFi dies. Currently being rebuilt from Lovable onto SvelteKit + Cloudflare Workers — own the infrastructure, own the performance, own the credibility.

SvelteKit Supabase Cloudflare Offline-first
SuiteMaps Venue seat map builder for small operators — gap validated across 24+ platforms in three market tiers + more
suitemaps.com ↗

Competitive research across 24+ platforms in three market tiers found the same gap: no affordable platform combined interactive seat selection, a custom venue map builder, and access management. Enterprise platforms had all three but were out of reach on cost and complexity. Budget platforms had QR ticketing but stopped there. SuiteMaps is the map editor layer — operators define their venue once, that structure drives seat selection, access control, and inventory downstream.

Schema-first: Venue → Configuration → Section → Row → Seat. Configurations are self-contained so layout variants never produce cascading bugs. SVG parsing, auto-naming, ADA seat detection — all client-side, zero external APIs.

SvelteKit Svelte 5 TypeScript Cloudflare
SuitePresent Slide editor running completely in the browser using OCR via Tesseract.js + more
suitepresent.com ↗

AI tools produce beautiful static PDFs. Editing them means regenerating everything. SuitePresent solves this: import a slide, lift elements off the static background, move and edit them as floating layers. OCR via Tesseract.js means you grab and edit actual text — not just place boxes on top.

Deliberately minimal: a single HTML file, React via ESM CDN, no build step, no bundler, deployed straight to Cloudflare Pages from GitHub. The whole editor runs in the browser.

React 18 Tesseract.js PDF.js Zero backend
BrainGroov Real-time brain region activation mapped to whatever you're listening to + more
braingroov.com ↗

Started as a personal question: why do I love certain parts of a song and not others? BrainGroov maps what's happening in your brain in real time while you listen. Share any browser tab playing audio — YouTube, Spotify, anything — and spectral features extracted via Meyda every ~500ms drive activations across 13 brain regions: nucleus accumbens, VTA, amygdala, hippocampus, and more. Every mapping has a peer-reviewed citation.

The visualization is a hand-drawn SVG brain. Regions pulse proportional to activation. Post-session, Claude generates a time-synced narrative of what your brain was doing moment to moment.

SvelteKit Web Audio API Meyda Computational neuroscience
Local Art Calendar Arts event discovery for the things that don't get the ad budget + more
localartcalendar.com ↗

Arts events, community gatherings, independent venues — the things that don't make it onto the featured page because they don't have the ad budget.

SvelteKit Cloudflare
1491 Taíno Alive Three-system museum installation — web kiosk, thermal printer, CRT display — with a weighted erasure algorithm that mirrors colonial census practices + more
1491tainoalive.com ↗

Visitors sign their name at a kiosk and receive a thermal-printed Hollerith punch card receipt. Over two months, a weighted erasure algorithm systematically alters, redacts, and removes their names from the official record — mirroring what happened to Indigenous peoples in colonial census systems. Erasure escalates from 20% in week one to 80% by close. Name alterations replicate documented colonial practices: anglicization, shortening to initials, surname removal, full replacement with European names.

Three integrated systems: a SvelteKit + Cloudflare Workers web app with a D1 database; a Node.js polling service on a Raspberry Pi Zero 2W driving a 58mm thermal printer via ESC/POS commands; and a custom Python/C driver rendering live visitor data to a vintage IBM monochrome monitor via MDA video memory. The dual-table architecture — immutable truth_record alongside an official_record subject to erasure — is the conceptual core. The gap between them is the point.

On opening day a corrupted SD card took down the Raspberry Pi. Reflashed the OS, reconfigured the printer service, had it operational before visitors arrived. No data lost. All production changes and database operations were performed live with active visitors in the gallery.

SvelteKit Cloudflare D1 Raspberry Pi Thermal printing MDA / CRT driver Museum installation
Artist Safe Spaces Nonprofit + annual IKEA festival + a platform built from 10+ years inside the arts ecosystem + more
artistsafespaces.com ↗

This one didn't start with a product idea. It started with 10+ years working inside every layer of the arts ecosystem — leading art committees, local government arts programming, anti-graffiti initiatives, mural restorations, running an art directory, curating as a gallery partner, and producing city-wide art walks. I've studied how arts organizations operate from the highest institutional level down to the most local. What's missing is a plan, technology to execute it, and partners to fund it without ongoing government dependency.

Artist Safe Spaces is the nonprofit vehicle. We run an annual festival in partnership with IKEA. The mission is building art parks in every city in the US. Behind the current site, a platform is in development — white-labeled tools cities can use to run their own arts programming, dogfooded on our own events and integrated with the Suite ecosystem.

Nonprofit IKEA partnership SvelteKit Platform in progress