Good things,
built together.

I'm Daniel Kaspo, a software engineer with 14 years of professional experience. I build websites, dashboards, and customer experiences, and mentor the developers alongside me. Here’s the work behind my time at Detroit Labs, Barracuda Networks, and Kensington Church, and my own hardware company, keyboard.gg.

Experience
14 years, since 2012
Now
Founder, keyboard.gg, since 2019
Before that
Software Engineer, Detroit Labs, 2017 to 2025
Based in
Michigan, USA

Different problems.
The same care.

Selected client work through Detroit Labs, with the size of each team and my part in it.

More places I contributed

Delta

Prototyped a scheduling calendar for a prospective-client engagement. I wrote it from scratch, without a third-party calendar, so it could be customized later.

Shinola

Worked on the frontend of Shinola’s website redesign, and demoed the work to the client’s non-developer team.

An idea of your own?

Tell me what you’re imagining

Where I’ve been building.

Aug 2019 — present

keyboard.gg

Founder

Designed, built, and sell the Edgeguard, an adapter that turns a keyboard into a Nintendo Switch controller: the circuit board in KiCad, the USB firmware in C, and the React and WebUSB tools that configure it. It has been on sale in beta since early 2023. I started it alongside Detroit Labs, and it has been my main focus since December 2025.

Meet the Edgeguard
Oct 2017 — Dec 2025

Detroit Labs

Software Engineer

Built websites, dashboards, and customer flows on client teams of 4 to 15 people. On one long engagement I was the client team’s only web developer, and the person they came to with technical questions. Mentored four to six newer developers, onboarded new teammates, ran technical interviews, estimated work for prospective clients, and helped manage Jenkins and CI/CD jobs.

Sep 2014 — Oct 2017

Barracuda Networks

Software Engineer

Worked on Copy.com and CudaDrive file sharing, then the Barracuda Cloud Control dashboard. Used Backbone.js on CudaDrive and React with ES6 on Cloud Control.

Apr 2012 — Sep 2014

Kensington Community Church

Web Developer

I was the church’s main web developer. I moved its fixed-width PHP site to a responsive design on the Arena church CMS, working with the graphics team on the look, and built C#/.NET modules and the Foundation frontend. Then a leader mentioned an idea in a meeting: gift cards where whoever receives one picks which cause the money goes to. Nobody assigned it to me. I built a working kiosk app for loading the cards, bought a USB card reader and learned how to program for it, and we had kiosks on the main floor in time for the Christmas giving season.

See the gift card kiosk
A few more chapters
MyEtherWallet Software Engineer
Jun — Jul 2017Contributed to the next major version of its frontend.
New World Systems Intern
May — Aug 2011Worked on SQL Server Reporting Services (SSRS) reports and website compatibility issues.
Macomb Community College Associate’s degree, Computer Science
2010 — 2013

Have a role in mind?

Let’s talk about your team

Leading, with or without the title.

My title at Detroit Labs was Software Engineer. This is the work I was trusted with beyond writing code, in my colleagues’ words where I have them.

Trusted alone with a client

Detroit Labs could put me on a project by myself and rely on me to work with the client, schedule the meetings, gather the requirements, and deliver on time. At Bedrock I was the only web developer on the client’s team, and for a long stretch the only person there from Detroit Labs.

Mentoring, onboarding and interviewing

Detroit Labs trusted me to pair with newer developers and help them grow. I let my partner drive, and asked the questions that helped them reach the answer themselves. Over the years I mentored four to six developers this way, interns among them, and onboarded new teammates. On some projects it was me and one junior developer, and I led. I also ran technical interviews.

Settling a decision with a working prototype

When a team is weighing approaches, I build a working version quickly, so the decision can be made by using it. A scheduling calendar for a prospective Delta engagement was one of those. I wrote it from scratch, without a third-party calendar, so it could be shaped to whatever came next.

Raising the bar on code review

I review thoroughly, and I present my own work the way I want to receive it: a short video, screenshots, and exact steps to test.

Estimates and options a client can act on

Detroit Labs often asked me to estimate task lists for prospective clients. In an estimation session on the Driveway work, I laid out three ways we could change the scope and the timeline. At Bedrock I compared four content platforms against a real page from their site, and made the recommendation.

How I work.

Show the work.

Short videos, screenshots, and explicit testing steps are part of how I share a pull request. I want teammates to see what changed, what I checked, and where to look.

Help others grow.

At Detroit Labs, I was trusted to mentor newer developers through pair programming. I let my pairing partner drive and asked clarifying questions to help them work toward an answer. Colleagues consistently praised my patience, explanations, and approach to teaching.

Make the choices clear.

Whether it’s a client demo or a technical discussion, I try to make the options and tradeoffs understandable to the people making the decision.

Test it, and make it work for everyone.

I write automated tests: Jest for logic, on some suites close to 100% coverage, and Storybook so QA can check each component on its own. I’ve helped companies reach AA and AAA accessibility conformance. That work is contrast ratios, full keyboard access, and semantic HTML, like a real button where a div was standing in for one. And I use Chrome’s performance tools to find what slows a page down: large files, resources that should have been prefetched, and blocking code.

Work with AI, and stay the engineer.

I use Claude Code every day. It has let me build things I’d wanted to make for a long time, and fix Edgeguard firmware bugs I had been stuck on. I stay responsible for the result. On the firmware I still read every diff, and every change has to get through a stack of keyboards and USB hubs before I trust it. When a model started covering one of those bugs with retries, I stopped it and had it find the root cause.

What I work with

Web
JavaScript, TypeScript, React, Redux, HTML, CSS, responsive design, Node.js, PHP, Backbone.js, C#/.NET
Quality
Jest, Storybook, accessibility to WCAG AA and AAA, performance profiling with Chrome DevTools, code review
Design & delivery
Lottie integration, MJML, Litmus, Git, Jenkins CI/CD, video walkthroughs, pairing and mentoring
Hardware & systems
C firmware, USB HID, KiCad, WebUSB, WebAssembly; hands-on Linux server administration, Docker and self-hosted services
AI tools
Claude Code every day; OpenAI Codex; Higgsfield for video

What should we
build next?

A role on your team or an idea of your own. I’d love to hear what you have in mind.

Message me on LinkedIn (opens in a new tab)

For your team

A little about the role, the people, and the problem you’re working on is a great place to start.

For your idea

Who’s it for? What would you like it to do? A rough idea is enough to start a conversation.