Skip to content

Work

Work you can open and look at.

A public college estate, an emergency shelter, an internet provider, a national directory, a parade. Different scales, and the same standard applied to each.

When you have to prove the site is accessible

An obligation, a filing date, and a site too large to check by hand. What matters here is whether the answer holds up when somebody asks for evidence.

AODA compliance — from $2,500

  • Confederation College

    confederationcollege.ca (opens in a new window)

    Public college, Thunder Bay

    The estate moved onto modern rails without losing URLs or search visibility, and accessibility became something checked on every build.

    The situation: Several thousand public pages, content owners across dozens of departments, a statutory accessibility obligation, a small team, and no option to take the site down while you fix something.

    What the work did: Accessibility run as a continuous program rather than an annual audit — automated checks on every build, so the compliance position is a record with dates attached instead of two years reconstructed from memory. Publishing sits with the departments that own the content, on a headless CMS, with the structure constrained so they cannot break it. Course lists and fees come from the student information system at build time.

    Built with Astro, Sanity, Cloudflare, Netlify.

  • Shelter House

    shelterhouse.on.ca (opens in a new window)

    Emergency shelter and community services, Thunder Bay

    Help is one tap from the homepage, and the site has kept up with them since.

    The situation: People arrive at a site like this in a crisis, often on an old phone, needing one specific answer immediately. The site also has to hold up in front of funders.

    What the work did: A rebuild where finding help fast was the design constraint that outranked everything else — plain navigation, no interstitials, an approved colour palette, and content a small team can keep current.

    Built with Astro, Sanity, TailwindCSS, Netlify.

  • This site runs on a theme it produced, and its colour files are generated rather than chosen by eye.

    The situation: Every project starts by rebuilding the same foundations, and a palette chosen by eye tends to fail contrast somewhere nobody checks.

    What the work did: A theme builder for Astro and Tailwind: pick an anchor colour, generate a coherent set around it, lock what you want to keep, and take away two files. The generated themes are built to hold up against contrast requirements rather than only look right.

    Built with Astro, TailwindCSS, OKLCH.

When rebuilding must not cost you what you already have

The expensive part of a rebuild is never the design. It is the URLs, the content and the search traffic already earned — and whether the team can still publish afterwards.

Website redesign — from $8,000

  • Licenzii

    лицензии.укр (opens in a new window)

    Regulatory / licensing services, Ukraine

    More leads than they could process — the owner asked to switch ads off for some services while the team caught up. And the site's simple structure has since become the standard competitors copy.

    The situation: Licensing services are bought through a Google search, and every competitor bids on the same clicks. Whether the ad spend comes back as leads is decided by the page the click lands on.

    What the work did: A deliberately simple site: plain structure, pages shaped to convert the Google Ads traffic that lands on them, SEO carried by that same structure, and speed treated as a feature — four ingredients of one user experience, not four separate jobs.

    Built with GatsbyJS, ReactJS, Bootstrap, Contentful, Google Analytics, Google Ads.

  • NewTelecom

    newtelecom.ua (opens in a new window)

    Internet service provider, Ukraine

    People who would have picked up the phone started making contact through the site instead — and the build has since moved off a dying stack without losing any of that.

    The situation: An established provider whose site was not being found by the people already searching for what they sold.

    What the work did: Rebuilt the site and rebuilt how it was organised for search — structure, semantics and technical quality first, no bought links — then ran acquisition and measurement alongside it. Rebuilt a second time years later, to get off a stack that had stopped earning its keep — the old build still worked, but its dependencies had fallen behind what the host supported and routine changes cost more than they should. The current site is a new design with a four-step connection request that puts the address on a map, and separate paths for households and for businesses.

    Built with Astro, Contentful, TailwindCSS, Leaflet, Netlify, Google Ads.

  • Nytka

    github.com/koval-dev/nytka (opens in a new window)

    Open specification, published

    A migration has a mapped URL inventory rather than a memory of one, and handover is a document rather than a phone call.

    The situation: Most agency delivery lives in someone's head. Decisions get made in a call and never written down, the reason for a choice is lost by the time it matters, and the next person — including the client — inherits a site with no record of why it is the way it is.

    What the work did: A published open format for keeping a project's decisions, research and evidence in one readable structure, with the reasoning recorded alongside every claim. It is a working toolchain, not only a format — it connects to the analytics, search and advertising accounts a project already has, and it runs my own work, where it checks every change before it ships.

    Built with JavaScript, npm.

When you want to own it instead of renting it

Bought platforms, subscriptions and vendor renewals replaced with systems the organization owns and its own staff run. The test is what happens the day I stop answering the phone.

Web development & delivery — from $6,000

  • A bought-in product replaced by something the college owns — the same functionality, run by the same staff, now with no external cost and full control.

    The situation: Orientation ran on a purchased platform. Staff already updated the scenarios themselves; what the subscription bought was the functionality underneath — renewed on the vendor's cycle, on a product the college did not control.

    What the work did: A branching system where each kind of student follows their own path through the material, built on a headless CMS. Everything the college actually used in the bought product was rebuilt in-house, and the orientation team edits it directly, as it always did. Events carry proper markup so they are readable outside the site as well as in it.

    Built with Astro, Contentful, Netlify.

  • Distance and continuing education

    distance.confederationcollege.ca (opens in a new window)

    Public college, Thunder Bay

    The department now has pages of its own worth promoting — mobile-friendly, searchable, discoverable — and can put up a landing page to market an upcoming course.

    The situation: A site built many years ago, before the department worked the way it does now — not responsive, not accessible, and fed by hand.

    What the work did: A searchable, discoverable, responsive catalog, built to modern performance practice. The pages earn organic traffic now, and submissions come in through the site itself.

    Built with Contentful, Netlify.

  • Rotary Santa Claus Parade

    rotaryparade.ca (opens in a new window)

    Community event, Thunder Bay

    It has carried successive parade seasons without a rebuild.

    The situation: Thousands of people need the route and the start time, on a phone, outdoors, in a Thunder Bay winter — over about two weeks a year.

    What the work did: A small, fast site that answers both questions above the fold on the page everyone lands on, and costs almost nothing to keep online for the other fifty weeks.

    Built with Astro, Contentful, TailwindCSS, Netlify.

When you are not being found by people already looking

Structure, semantics and content rather than bought links. Sometimes the harder part is that the thing worth leading with is not the thing you wanted to sell.

SEO audit — from $2,500

  • Taho

    taho.org.ua (opens in a new window)

    Commercial transport directory, Ukraine

    Top positions on competitive terms, with no link building and no ongoing search spend.

    The situation: The information existed but was scattered across dozens of places, so nobody could compare anything.

    What the work did: Built a directory that consolidates it, structured so each listing can be found directly from search rather than only from inside the site. Structure and semantics did that on their own, and it now carries an audience the directory can build on.

    Built with GatsbyJS, ReactJS, TailwindCSS, Leaflet, Supabase.

  • Broken links get caught by a scan instead of by a visitor.

    The situation: Broken links accumulate silently on any large site, and checking them by hand is the kind of job that never gets done.

    What the work did: A browser extension that scans a chosen part of a page, flags broken and redirected links immediately, and exports the result. Built because I needed it; published because other people did too.

    Built with JavaScript.

When money goes out and nobody can say what came back

Campaigns, and the measurement underneath them, built first — so the reporting means something to whoever signs the cheque.

Google Ads & analytics — from $625

  • StoneWizards

    stonewizards.ca (opens in a new window)

    Quartz countertops, Toronto

    The advertising is what got them into the niche, and kept the work coming while the business established itself.

    The situation: Quartz countertops in Toronto is a trade people buy once a decade and choose by showroom. A new entrant has no reputation to be found by and nobody looking for them by name.

    What the work did: Built the campaigns and, first, the measurement underneath them — conversion tracking, analytics and reporting configured so the numbers reflect enquiries rather than clicks.

    Campaigns and measurement run with Google Ads, Google Analytics, Tag Manager, Looker Studio.

  • Easy Afford

    easyafford.ca (opens in a new window)

    Kitchen design, Toronto

    The advertising got the business off the ground, and they run the account and the site themselves now.

    The situation: A new business trying to establish itself in a competitive Toronto niche, with no demand of its own to draw on yet.

    What the work did: Paid acquisition built to bring the work in from the start, with the tracking and reporting alongside it, plus an audit of the site and a list of what needed fixing. It was built to be handed over from the start.

    Campaigns and measurement run with Google Ads, Google Analytics, Tag Manager, Google Sheets.

Something here look like your situation?

Tell me what you are dealing with. You will hear whether it is the same problem and what it would take.

Check your project