Web applications
Scalable, maintainable software tailored to your business.
These blocks use a layout-only tg-section with the copy and child shortcodes (tg-card, tg-step, tg-spark, tg-connector, tg-flow-step, tg-pillar, optionally content-card inside split-teasers, and for info-split - tg-info-left, tg-info-card, tg-info-list) in the same file, so you can translate per language and reuse a layout with different content.
%BR% in the title or lead params where you need a line break (raw <br> in attributes breaks the shortcode parser). / then >}} on the same line as the tag.services-line / bg="light"Services
From idea to launch, we build reliable systems and automate processes of any size.
Scalable, maintainable software tailored to your business.
We remove the grind so your team can focus on what matters.
We connect your tools and keep data moving reliably between them.
We stay with you: shipping improvements and keeping things stable.
services-cards / bg="tint"What we do
Websites, services, and apps of any size - clean code and attention to detail.
Integrations, playbooks, and bots that take busywork off your plate.
We maintain and evolve your product when you actually need a partner, not a ticket queue.
services-grid / bg="dark"What we do
Websites and web apps from landing pages to complex systems.
We wire up processes and integrations that save time and headspace.
We connect services and systems so they work together, reliably.
We stay after go-live and help your product get better over time.
process-numbers / bg="light"Order in process-numbers: tg-step, then tg-spark, then tg-step, … (spark only between steps, not after the last one).
How we work
We learn your business, goals, and constraints so we can propose a fit, not a fad.
We shape structure, logic, and UX that solve the problem and feel good to use.
We write solid code, test, and integrate so the result is stable and fast enough.
We launch and stay close, iterating on feedback and metrics.
process-flow / bg="tint"In process-flow, put a tg-connector between each tg-flow-step except after the last step.
How we work
We dig into the problem, ask the right questions, and align on the real goal.
We propose a solution and think through the shape of the product with you.
We implement, test, and integrate - quality and deadlines both matter.
We look at what shipped, gather feedback, and make the next version better.
process-pillars / e.g. bg="light"Three cards in a row: number (uses primary / --section-accent), title on the left; image on the right (same height for all, top-aligned); lead text below. Arrows between cards, equal space on the left and right, vertically centered. illustration or mark as for tg-card. Same bg options. You can omit eyebrow, title, and lead on the section.
how we work
A short path from understanding your context to building and improving the system with you.
We study your current situation to see where time, money, and control are slipping away.
We find growth opportunities and show how to align processes and tools.
We assemble the system, roll it out, and keep making it better together with you.
split-teasers - section head + teaser card gridSame two-column shell as services-cards: eyebrow / large title / lead on one side; on the other, a grid of cards with image on top (up to four columns on wide screens unless a modifier narrows the grid). Stacks on small screens.
On the home page, Lab (home-lab-cards) uses this layout with a three-column card grid on wide screens. Copy for the left column comes from lab/_index.*: title, short home_summary (falls back to description), and home_cta_label for the footer link. Selected work (home-project-cards) is not split: full-width section head, then a four-column card row. Set bg like other sections (page, light, tint, …).
Inside the section, use content-card shortcodes (image, title, text, optional href, eyebrow, tag). The legacy type parameter on content-card is ignored by styles.
info-split - copy left + card with lists on the rightTwo main columns: on the left, tg-info-left (image, heading, optional list marker - check / cross / dot, image_alt) plus a Markdown list as inner content; on the right, tg-info-card (bg: tint, tint2, light, page, dark). Inside the card, repeat tg-info-list (heading, marker) with a Markdown list as inner content.
The section uses eyebrow, title, lead, and bg (page by default for this layout). Those fields render in the left column, above tg-info-left. Order matters: tg-info-left first, then tg-info-card (columns are split using a small sentinel appended to the tg-info-left output).
Who this is for