Start a project
Start a project

Engineering-led custom software

Polished on thesurface.Engineered allthe way down.

O2 Tech Labs designs and builds WordPress and Next.js platforms, custom software, and integrations, and takes on the hard problems underneath them: architecture, data, performance, and the parts nobody notices until they break.

  1. Interface
  2. Application
  3. APIs & integrations
  4. Data
  5. Infrastructure

Senior engineering across

  • WordPress platforms
  • JavaScript applications
  • Integrations
  • Performance
  • Custom applications
  • Architecture

What O2 is

Most software problems trace back to decisions: what to build, where it runs, how it connects, what happens under load. O2 is a senior engineering partner for teams that need those decisions made well, and the software built to match.

Who we work with

  • Product teams building something off-the-shelf software can’t do.
  • Organizations whose WordPress or JavaScript platform has outgrown its original build.
  • Agencies and in-house teams that need senior engineering on a difficult piece of work.
  • Operators connecting systems that were never designed to talk to each other.

Capabilities

What we build, and what we fix.

Our deepest experience is in WordPress platforms, Next.js applications, systems integration, and performance and troubleshooting work. We also build custom software and help with architecture.

WordPress engineering

Themes, editorial tools, migrations, and multisite platforms for large content sites.

We build custom themes and block themes, custom blocks with real data models, and plugins that connect WordPress to the rest of your stack. We also run complex content migrations, set up publishing feeds that distribute content to other platforms, and manage multisite networks with functionality shared across sites. Editors get a fast, pleasant interface with sensible limits, and engineers get code they can maintain.

  • Custom & block themes
  • Custom Gutenberg blocks
  • Custom plugins
  • Complex content migrations
  • Publishing feeds & distribution
  • Multisite management
  • Technical SEO at scale
  • REST API & headless

Layers reached

  • Interface
  • Application
  • APIs & integrations
  • Data
  • Infrastructure (not involved)

Modern JavaScript applications

React, Next.js, and TypeScript applications where rendering is decided route by route.

Component systems your team can extend, written in TypeScript. Each route gets static generation, server rendering, or streaming, depending on what it serves. We go headless when the extra complexity pays off and build a solid monolith when it doesn’t.

  • Next.js & React
  • TypeScript
  • Server-side rendering
  • Static generation
  • Component architecture
  • API-driven frontends
  • Headless architectures
  • Modern build tooling

Layers reached

  • Interface
  • Application
  • APIs & integrations
  • Data (not involved)
  • Infrastructure (not involved)

Systems & API integration

Connecting platforms that weren’t built for each other, and keeping their data in agreement.

We design the middleware, webhooks, and sync jobs between CRMs, payment providers, SaaS tools, authentication systems, and internal APIs. We work out with you which system owns each field, and build in retries and monitoring so drift between systems shows up early.

  • Third-party APIs
  • HubSpot & CRM integrations
  • Data synchronization
  • Authentication & SSO
  • Webhooks
  • Custom middleware
  • Data pipelines
  • Business system integrations

Layers reached

  • Interface (not involved)
  • Application (not involved)
  • APIs & integrations
  • Data
  • Infrastructure (not involved)

Performance & problem solving

Finding the real cause of a hard problem and fixing it at the source.

Slow pages, failing integrations, production bugs that only appear under load, migrations nobody wants to run. We work from evidence (traces, profiles, logs, field data) until we find the root cause, fix it there, and add tests or monitoring that catch it if it returns.

  • Performance bottlenecks
  • Core Web Vitals
  • Database & API efficiency
  • Scaling issues
  • Production bugs
  • Complex migrations
  • Security concerns
  • Technical debt

Layers reached

  • Interface
  • Application
  • APIs & integrations
  • Data
  • Infrastructure

Custom software engineering

Applications built around how your business works, for when off-the-shelf products don’t fit.

We design and build software from real requirements: internal tools that remove manual work, SaaS products, customer-facing applications, and the backend services behind them. When an existing system is holding you back, we modernize it in stages, planned around keeping the business running.

  • Custom web applications
  • Internal business tools
  • SaaS products
  • Workflow automation
  • API-driven applications
  • Complex frontend systems
  • Backend services
  • Legacy modernization

Layers reached

  • Interface
  • Application
  • APIs & integrations
  • Data
  • Infrastructure

Architecture & infrastructure

The decisions that keep a system maintainable, secure, observable, and fast as it grows.

We define service boundaries, API contracts, data flows, and deployment strategy, and choose hosting for the workload and the team that has to run it. For systems that already exist, we also run architecture reviews and technical audits.

  • Application & cloud architecture
  • API architecture
  • Service boundaries & data flows
  • CI/CD & deployment strategy
  • Hosting & platform decisions
  • Scalability & reliability
  • Performance strategy
  • Technical audits & reviews

Layers reached

  • Interface (not involved)
  • Application
  • APIs & integrations
  • Data
  • Infrastructure

The engineering layer

Every system is a set of decisions. Good architecture makes them work together.

Where work happens, where data lives, and how failures are handled all affect performance, reliability, and maintenance. These decisions evolve as your business grows. Here are five areas that shape how a system works.

An illustrative system architectureClients reach the application through an edge network and CDN. The application hands background work to a job queue, uses a search index, a WordPress or headless CMS, a database and a cache, and connects to external services such as a CRM, payments, email, and analytics. A deployment pipeline releases to the edge and the application, and components report to a shared observability layer. Solid lines show runtime traffic; dashed lines show deployments and telemetry.DeploysCommitChecksPreviewReleaseClientsBrowserMobile appEditorsEdge & CDNCached pages, assetsApplicationRenderingAPI routesAuth & sessionsJob queueRetries, idempotencySearch indexSynced on writeCMSWordPress / headless CMSDatabasePrimary + replicaCacheExternalCRMPaymentsEmailAnalyticsObservabilityLogs · traces · metrics · alerts12345An illustrative system architecture: clients, edge and CDN, application, job queue, database, external services, cache, and observabilityClientsEdge & CDNApplicationRendering · API routes · AuthJob queueDatabaseExternalCRM · PaymentsEmail · AnalyticsCacheObservabilityLogs · traces · metrics12345

Illustrative architecture. Each project uses the components its requirements call for.

Five areas, numbered on the diagram

  1. Delivery & caching

    Decide what can be served from the edge, what needs fresh data, and how cached content stays current.

  2. Application architecture

    Define where rendering, business logic, APIs, and authentication belong so the application stays maintainable.

  3. Data & background processing

    Choose how data is stored and when work should run in the background, including how retries avoid duplicate actions.

  4. External integrations

    Define how connected services exchange data and how failures, timeouts, and service limits are handled.

  5. Observability

    Use logs, metrics, traces, and alerts where appropriate to understand system behavior and investigate problems.

Decisions we help you make

Application architecture
Service boundaries, modules, and the seams that let a codebase change safely.
API design
Contracts, versioning, authentication, and error behavior other teams can rely on.
Data flows
Where data lives, who owns each field, and how it moves between systems.
Cloud & hosting
Platforms sized to the workload and to the team that runs it.
Delivery
CI/CD, preview environments, and deploys that are boring in the best way.
Observability
Logging, tracing, and alerting that answer questions before anyone has to ask.
Performance & scale
Budgets, caching strategy, load testing, and capacity planning.
Security
Least-privilege access, dependency hygiene, and secrets handled properly.
Reviews & audits
A senior engineer from outside your team reviews the system and writes up what to fix first.

Field notes

Problems we get called in for.

These are composites based on the kind of work we take on, not accounts of specific clients. The details vary from client to client, but the same problems keep coming up.

Example scenario · Scaling

Every Monday morning, checkout slows to a crawl.

  1. Symptom

    Response times climb from under a second to eight or more during the weekly peak. Restarting the servers buys an hour.

  2. Investigation

    Request traces, slow-query logs, and connection-pool metrics, then a load test that reproduces the Monday peak on staging.

  3. Root cause

    A reporting query added months earlier locks the orders table. Under load, checkout requests queue behind it until the connection pool runs dry.

  4. Fix

    Reporting moves to a read replica, the missing composite index goes in, and pool limits and timeouts get set. The load test joins CI so the regression can’t come back unnoticed.

  • Database efficiency
  • Scaling
  • Load testing

WordPress

WordPress, engineered like software.

We build custom editorial experiences, maintainable themes and plugins, WordPress sites connected to the rest of your systems, and multisite platforms that run many sites from one codebase. That includes the work around a large content platform: complex migrations, publishing feeds, and technical SEO across the whole platform.

{
  "apiVersion": 3,
  "name": "o2/service",
  "title": "Service",
  "category": "o2-tech-labs",
  "attributes": {
    "summary": { "type": "string" },
    "layers":  { "type": "array", "default": [] },
    "stack":   { "type": "array", "default": [] }
  },
  "supports": {
    "align": ["wide", "full"],
    "spacing": { "padding": true },
    "color": { "background": true }
  },
  "editorScript": "file:./index.js",
  "render": "file:./render.php"
}
  1. Typed attributes

    Content is stored as structured data, not a blob of HTML, so it can be queried, migrated, and reused.

  2. Supports + theme.json

    Spacing, color, and type come from design tokens, so editors can choose among options without breaking the design.

  3. Server-side render

    The server renders and caches the output, so pages are fast, crawlable, and free of markup drift from the editor.

  4. REST API

    Custom REST fields return the same data as JSON, ready for a Next.js front end, a publishing feed, or HubSpot.

Editor experience

  • Custom Gutenberg blocks
  • Block patterns & locked templates
  • Custom themes & block themes
  • Custom editorial workflows

Platform

  • Custom plugins
  • Multisite & shared functionality
  • Complex content migrations
  • Publishing feeds & distribution
  • REST API & integrations

Quality

  • Technical SEO for large content platforms
  • Accessibility (ADA)
  • Performance optimization
  • Security-conscious development
  • Modernizing legacy themes

JavaScript applications

Modern JavaScript, from framework to database.

We build web applications on Next.js and the wider JavaScript ecosystem, and connect them to the databases and services a growing product needs.

01

The right framework for the job

Next.js is our default for applications. For content sites we also use Astro, which ships very little JavaScript, and Gatsby, which builds static sites from many data sources.

  • Our defaultNext.jsApplications and dynamic sitesStaticServerStreaming
  • AstroContent sites with minimal JavaScriptStaticIslands
  • GatsbyStatic sites from many data sourcesStaticGraphQL layer

02

Data that fits the product

MongoDB when your data is a set of flexible documents. Neon when it needs Postgres: relational, serverless, and able to branch a copy of the database for each preview.

A Next.js app reading and writing data in MongoDB and in Neon Postgres, where a preview branch forks from the main databaseNext.js appServer-side data accessMongoDBFlexible documentsNeonServerless PostgresA Next.js app connected to MongoDB and to Neon PostgresNext.js appServer-side data accessMongoDBFlexible documentsNeonServerless Postgres

03

Connected to the rest of your business

Most apps need to talk to other systems. We connect them to WordPress as a headless CMS, HubSpot, payments, sign-in, search, and email, with retries and monitoring on every connection.

Your app at the center, connected to WordPress, HubSpot, Stripe, authentication, search, and emailYour appWordPressHeadless CMSHubSpotCRM & formsStripePaymentsAuthSign-in & rolesSearchSite searchEmailTransactionalYour app connected to WordPress, HubSpot, Stripe, authentication, search, and emailYour appWordPressHeadless CMSAuthSign-in & rolesHubSpotCRM & formsSearchSite searchStripePaymentsEmailTransactional

04

The whole stack, layer by layer

The tools we reach for at each layer of an application. We choose from them per project, and most apps use only a few.

  1. Interface
    • React
    • TypeScript
    • Sass
    • Accessible UI (ADA)
  2. Application
    • Next.js
    • Astro
    • Gatsby
    • Node.js
  3. APIs & integrations
    • REST
    • GraphQL
    • WordPress REST API
    • HubSpot API
    • Stripe
  4. Data
    • MongoDB
    • Neon Postgres
    • Prisma
    • Redis
  5. Infrastructure
    • Vercel
    • GitHub Actions
    • Docker

Next.js

Applications rendered on purpose.

We build React and Next.js applications in TypeScript, with component systems your team can extend. Each route gets the rendering strategy that fits what it serves.

One application, six rendering decisions
RouteStrategyBecause
/Static, hourlyShared by everyone
/pricingStaticChanges on deploy
/docs/[slug]Static, from CMSThousands of pages
/accountServer-renderedPersonal to each user
/dashboardStreamedSlow data, fast shell
/api/searchCached, 60 sHot and read-heavy

Our default

Headless when it earns its complexity. A well-built monolith when it doesn’t.

SEO & syndication

Built to be found.

How a business shows up online, in search results, news apps and the feeds partners pull from its site, is part of its identity. We build the technical side of it: fast, stable pages, markup search engines can read, sitemaps that keep up with your content, and feeds built to each syndication partner’s spec.

Your platform, whether WordPress, Next.js, or any other stack, reaches search engines through a fast website with sitemaps and structured data, and syndication partners such as Yahoo, MSN, NewsBreak, SmartNews, Flipboard, Yardbarker through custom feedsYour platformWordPress, Next.js,or any other stackWebsiteFast, clean pagesFeedsSearch enginesSitemaps, schemaYahooMSNNewsBreakSmartNewsFlipboardYardbarker+ more partnersYour platform reaches search engines through the website, and Yahoo, MSN, NewsBreak, SmartNews, Flipboard, Yardbarker and more through custom feedsYour platformWordPress, Next.js,or any other stackWebsiteFast, clean pagesFeedsSearch enginesSitemaps, schemaYahooMSNNewsBreakSmartNewsFlipboardYardbarker+ more partners
  • Performance

    Core Web Vitals affect rankings as well as conversions. We hold LCP, INP and CLS to budgets, and the build fails when a change breaks one.

  • Structured markup

    Semantic HTML, schema.org structured data, canonical URLs and complete metadata, so search engines understand each page without guessing.

  • Sitemaps and crawling

    XML sitemaps generated from your content and updated on publish, with robots rules that point crawlers at the pages that matter.

  • Syndication feeds

    Custom feeds for Yahoo, MSN, NewsBreak, SmartNews, Flipboard, Yardbarker and other partners, each built to the partner’s spec, validated before it ships, and monitored afterward.

Performance, measured

Fast is something you can check.

Google’s Core Web Vitals measure how real visitors experience a page: how quickly the main content appears (LCP), how fast the page responds to input (INP), and whether it holds still while it loads (CLS). They’re one of the signals Google uses to rank pages, and slow pages lose visitors long before rankings matter.

We treat performance budgets like tests. This site runs Lighthouse on every pull request, on mobile and desktop, and a change that misses a budget doesn’t ship. The report here is this page’s own.

Lab scores are the starting point. After launch, field data from real visitors, in Search Console and Chrome’s UX Report, shows whether the numbers hold up.

This page, measuredLighthouse 13 · November 2026
Performance
100
Accessibility
100
Best practices
100
SEO
100

The same on mobile and desktop.

Lighthouse metrics for this page on mobile and desktop
MetricMobileDesktop
First Contentful Paint1.2 s0.3 s
Largest Contentful Paint1.2 s0.6 s
Total Blocking Time10 ms0 ms
Cumulative Layout Shift00
Speed Index1.2 s0.3 s

Mobile is Lighthouse’s simulated mid-range phone on a throttled 4G connection.

Performance

  • Core Web Vitals: LCP, INP, CLS
  • Lighthouse budgets in CI
  • Image, font and script loading
  • Third-party script control

Markup & metadata

  • Semantic, accessible HTML
  • Structured data (schema.org)
  • Canonical URLs & meta tags
  • Open Graph previews

Crawling & syndication

  • XML sitemaps, including news and image
  • Robots rules & crawl budget
  • Redirect maps for migrations
  • Custom partner feeds, validated and monitored

Where we fit

We build the platform search engines and partners rely on. Keyword and content strategy stay with your marketing team or SEO partner.

AI in our workflow

AI where it earns its place.

We use AI tools every day in our development and architecture work. They help us research faster, keep up with a fast-moving ecosystem, and spend less time on repetitive tasks.

Decisions stay with our engineers. Someone who understands the code reviews every change, and architecture and security calls are made by people.

Where it helps

  • Research and technical discovery
  • Keeping up with new tools, frameworks, and best practices
  • Exploring architecture options and trade-offs before committing
  • An extra pass over code for performance and security issues
  • Automating repetitive work: scaffolding, migrations, test cases

What stays with our engineers

  • Reviewing every change before it ships
  • Architecture and security decisions
  • Code review, where AI is a second set of eyes, never the only one

Approach

How an engagement runs.

The engineers who scope your project are the ones who build it.

Who leads O2

Alvaro Oropesa, surrounded by logos of technologies he works with: HubSpot, Next.js, JavaScript, PHP, HTML5, WordPress, Sass, React, Git, and Bash.

Alvaro Oropesa

President & founder

I’m a bilingual software engineer with more than 15 years in web and application development. My deepest experience is in custom WordPress work (themes, plugins, and Gutenberg blocks), HubSpot CMS, and React and Next.js applications, along with the integrations between them, such as REST endpoints that connect WordPress to HubSpot CRM.

I stay involved in our projects from the first technical conversation through delivery, working with the rest of the O2 team. Accessibility, SEO, performance, and security are part of how we build from the start.

15+
Years of experience
40+
Projects delivered
  1. 01

    Understand

    We start by reading the code, the infrastructure, the analytics, and the support tickets, and by talking to the people who use the system every day.

  2. 02

    Decide

    We write down each option with its trade-offs: cost, risk, time, and what it makes easier later. You make the call with all of that in front of you.

  3. 03

    Build

    We ship in small, reviewable increments, with automated checks, tests where they pay for themselves, and preview deployments where the hosting supports them.

  4. 04

    Hand over

    You get documentation, runbooks, and a walkthrough so your team can own what we built. If you’d rather, we stay on as your senior engineering partner.

Ways to work together

Build
A new application, platform, or integration, from architecture to launch.
Review
An architecture review or technical audit, delivered as a written, prioritized plan.
Rescue
Stabilize a system that’s failing, then fix whatever is causing it.
Partner
Ongoing senior engineering alongside your team, for as long as it’s useful.

Start a project

Tell us what has to work.

A new build, a platform that’s outgrown its original design, or a problem nobody has managed to pin down: send a few lines, and you’ll hear back from an engineer.

Project details

What do you need?

We only use your details to reply to you.

Sending this form needs JavaScript, which is turned off in your browser.