Development

How We Choose and Use Technology at HQ

For over thirteen years, HQ has built software across industries, scales, and systems.

Our technology choices are deliberate. Every time we start a new project, our team evaluates not just which tools are fastest or most modern, but which will be easiest to maintain by us or by our clients’ developers five years from now.

We discuss stack decisions as a team, weighing stability, ecosystem maturity, documentation quality, and developer familiarity. We avoid edge or experimental frameworks that could make long-term maintenance harder. Instead, we focus on popular, well-supported technologies that evolve without breaking foundations. Our stack is always improving but never experimental for its own sake.

Web Applications

Next.js + React + TypeScript

Our primary front-end foundation is Next.js, built on React and TypeScript.

Next provides a flexible architecture for hybrid rendering (server-side, static, and edge) while React gives us a modular, declarative UI layer that has stood the test of time. TypeScript ties it together with strict typing that reduces bugs and improves team velocity.

We use this combination for:

  • SaaS dashboards and internal tools
  • Marketing and content sites
  • Customer portals and hybrid web apps

It’s a framework that scales from a landing page to a full enterprise app and makes it easy for future teams to understand and maintain the codebase.

When projects need simpler setups, we use React with Vite or Remix, balancing developer speed and performance.

Mobile Applications

Swift and Kotlin (Native Development)

We also love building fully native apps.

When projects demand the highest polish, hardware integration, or platform-specific performance, we build directly in Swift (iOS) and Kotlin (Android).

SwiftUI and Jetpack Compose allow our teams to deliver experiences that feel perfectly at home on each platform, with smooth animations, offline reliability, and system-level integrations that cross-platform tools cannot always match.

We often start with React Native for rapid iteration and move to native when the product matures and demands platform-specific excellence. It’s not an either-or philosophy; it’s about the right fit for each phase of a product’s life cycle.

React Native + Expo

For most cross-platform mobile development, we rely on React Native with Expo. It lets us share UI patterns and logic with our web stack while producing real native apps. Expo’s over-the-air updates, build pipeline, and device APIs reduce complexity and improve reliability.

Backend and Infrastructure

Node.js + Express + NestJS

Our backend foundation is Node.js, giving us a unified language across the stack.

We use:

  • Express for small, focused APIs, webhooks, and integrations.
  • NestJS for complex systems that need modular architecture, dependency injection, and structured scalability.

Both pair naturally with PostgreSQL, managed through Prisma for schema management and type safety.

For real-time workloads and queues, we use Redis and BullMQ, and we deploy on Vercel, Render, AWS ECS, or Fly.io, depending on scale and requirements.

Why this works:

Shared language and tooling mean tighter collaboration. A front-end developer can understand the backend, reducing silos and improving delivery speed. Node.js continues to evolve, and the TypeScript ecosystem around it ensures type safety and maintainability.

Beyond JavaScript

While TypeScript and JavaScript are our foundation, they’re not our limits.

We use Python for AI integrations, data processing, and automation, especially when connecting machine learning systems or APIs.

We continue to build and maintain native mobile codebases in Swift and Kotlin, as those languages represent the pinnacle of native app performance and design integration.

We also maintain interoperability with .NET, Java, and PHP systems when working with clients whose existing infrastructure depends on them. Our goal is not stack purity, it’s durability and clarity.

Supporting Systems

Every stack relies on strong foundations:

  • Data: PostgreSQL, Prisma, Redis, and S3
  • Auth: Clerk, Supabase Auth, or Auth0, depending on the need for scale or compliance
  • Testing: Vitest, Playwright, Jest for automated stability
  • CI/CD: GitHub Actions, Vercel, and Expo EAS for continuous integration and deployment
  • Observability: pino, OpenTelemetry, and Sentry for transparent performance and error tracking

This infrastructure gives every project the same baseline: predictable builds, measurable performance, and a maintainable path forward.

Continuous Evolution

Every quarter, our engineering leads review the tools we use, what’s working, what’s improving, and what’s becoming obsolete.

When a new framework demonstrates clear advantages in developer experience or performance, we test it internally before recommending it to clients. We adopt slowly and deliberately, never chasing trends.

Our long history with many frameworks, including Ruby on Rails, Laravel, Angular, Vue, Django, and others, has taught us that the best technology isn’t the newest. It’s the one that balances power, predictability, and community support.

Closing Thoughts

Our technology stack reflects how we think: pragmatic, evolving, and focused on longevity.

We build with the best tools available today, without losing sight of long term maintenance. Whether that means a TypeScript monorepo, a Swift app, or a simple Express service, the goal is always the same: build clean, reliable systems that actually last.

If you’re exploring a new project and want a team that thinks as deeply about how to build as what to build, we’d love to talk.