BOUTIQUE WEB STUDIO ยท SINCE 2012

We code it. We host it.
We don't disappear.

A boutique team that designs, ships, and hosts under one roof. No outsourcing, no agency tax, no handoffs to strangers in year three.

SHIPS IN WordPress WooCommerce Laravel Vue / Nuxt Astro
Send your site โ†’ Async teardown in 48h. No call required.
40+
SITES RUNNING
100%
IN-HOUSE TEAM
<10min
AUTO-RECOVERY
100%
OWNED INFRA

One studio. One stack. Years three, four, five.

Most web work gets split across three companies: an agency designs it, freelancers code it, a hosting provider keeps it alive. By year two no one remembers why anything is the way it is, and you are calling three different numbers when something breaks.

Bineks runs all three under one roof. A small team of designers, engineers and DevOps, working in the same studio, on infrastructure we built and we run. The person who designs your checkout sits next to the person who deploys it. No handoff. No agency tax. No "let me check with the team."

We host on our own metal: a Hetzner VPS in Falkenstein running GitLab, Redmine, staging and production. We control every layer from kernel to CSS. When you ship with us, you ship into infrastructure we built and we run.

We don't take calls to qualify projects. We don't write proposal decks. Send the site, get a written teardown in 48 hours, decide from there. If we are a fit, we build. If we are not, you keep the teardown.

INFRASTRUCTURE
SERVERS
Hetzner CPX42 ยท Falkenstein (FSN1)
STACK
GitLab ยท Redmine ยท staging ยท production
SITES RUNNING
40+ across all our hosting
LAST INCIDENT
Auto-recovered, under 10 min

We don't show client sites. We show what we build, live.

Each card below is a real component from our work, stripped of client data. Click around, view the source, copy what's useful.

6 demos ยท all interactive ยท all open source

01

Smart shipping zones

WooCommerce

Default WooCommerce zones price delivery by country, not by city. For Estonia that means the same flat rate from Tallinn to remote islands, losing margin or scaring buyers off. Pick a destination to see how it should work instead.

DESTINATION
View source
// Smart shipping zones - resolve customer city to delivery zone,
// then filter available rates accordingly. WooCommerce hook.

add_filter('woocommerce_package_rates', function ($rates, $pkg) {
    $city = $pkg['destination']['city'] ?? '';
    $zone = bineks_zone($city);

    return bineks_filter_rates($rates, $zone);
}, 10, 2);

function bineks_zone($city) {
    static $map = [
        'Tallinn' => 1, 'Tartu' => 2, 'Parnu' => 2,
        'Narva'   => 3, 'Kuressaare' => 3,
        // ...full mapping configured in plugin settings.
    ];
    return $map[$city] ?? 4;  // fallback: outer zone
}
02

How does your site actually perform?

Live audit

We run a real Google PageSpeed audit on your site and put it side by side with what we typically ship. Paste your URL. Mobile profile, real Lighthouse, ~20 seconds.

No URL handy? See an example

Connecting
Real PageSpeed audit ยท usually 15 to 30 seconds
YOU COULD SHIP

Real-time audit via Google PageSpeed Insights ยท Lighthouse 11 ยท mobile profile ยท Bineks target = what we typically deliver on our Astro and tuned WordPress builds. Audit a different URL โ†ป

AUDIT FAILED

Make sure the URL is publicly reachable, or try a different URL โ†ป

View source
// Run Google PageSpeed Insights against a URL, mobile profile.
// API key restricted to bineks.net referrer; quota 25k/day.

const API = 'https://www.googleapis.com/pagespeedonline/v5/runPagespeed';
const KEY = '<your-api-key>';

async function audit(url) {
  const params = new URLSearchParams({
    url, strategy: 'mobile', category: 'performance', key: KEY
  });
  const r = await fetch(`${API}?${params}`);
  if (!r.ok) throw new Error(`HTTP ${r.status}`);

  const lh = (await r.json()).lighthouseResult;
  return {
    score: Math.round(lh.categories.performance.score * 100),
    lcp:   lh.audits['largest-contentful-paint'].numericValue,
    cls:   lh.audits['cumulative-layout-shift'].numericValue,
    jsKB:  Math.round((lh.audits['total-byte-weight']?.numericValue ?? 0) / 1024),
  };
}
03

Speed = money on the table

Performance

Every extra second on page load is conversions slipping out. Pick your current load time and monthly revenue. See what slow is costing you.

YOUR CURRENT LCP (largest contentful paint)
YOUR MONTHLY REVENUE
YOU'RE LOSING
โ‚ฌ0 / month
That's โ‚ฌ0 a year in revenue slipping past your checkout.
FIX LCP TO โ‰ค2.5s
+โ‚ฌ0 / month
Recovered the day your new build ships.

Math: 7% revenue impact per second above 2.5s LCP (Google's "Good" Core Web Vitals threshold). Based on Akamai, Google and Walmart commerce studies. Your numbers will be more specific once we measure your actual site.

View source
// Monthly revenue loss from slow LCP.
// Baseline impact: ~0.7% conversion drop per +100ms over 1s target.
// Source: aggregated e-commerce studies (Akamai, Walmart, Cloudflare).

function monthlyLoss(monthlyRevenue, lcpSeconds) {
  const TARGET_LCP     = 1.0;    // seconds, "fast"
  const LOSS_PER_100MS = 0.007;  // 0.7% conversion drop per 100ms

  const overrunMs = Math.max(0, (lcpSeconds - TARGET_LCP) * 1000);
  const lossRatio = (overrunMs / 100) * LOSS_PER_100MS;

  return Math.round(monthlyRevenue * lossRatio);
}

// Example: 50,000/mo store at 3.5s LCP
// 2500ms overrun, 17.5% conversion loss, 8,750/mo on the table.
04

What should you actually build on?

Stack advisor

We design, build and ship on four stacks. Tell us what you're making and we'll show you which one fits. No upsell. We'd rather lose the project than build it wrong.

01WHAT ARE YOU BUILDING?
02HOW OFTEN DOES CONTENT CHANGE?
03WHO EDITS THE CONTENT?
โ†‘ Answer all three to see our recommendation.
View source
// Stack scoring matrix. Each answer dimension scores 4 stacks (0-10).
// Final pick = highest sum across user's answers. Runner-up shown
// when within 2 points of the winner.

const STACKS = ['WordPress', 'WooCommerce', 'Laravel + Vue', 'Astro'];

const MATRIX = {
  // [WP, WC, Lar+Vue, Astro]
  contentFocused: [10,  6,  4,  9],
  ecommerce:      [ 4, 10,  7,  3],
  appWithAuth:    [ 3,  4, 10,  5],
  marketingSite:  [ 9,  4,  3, 10],
  customDomain:   [ 4,  4, 10,  6],
};

function recommend(answers) {
  const totals = STACKS.map(() => 0);
  for (const dimension of answers) {
    MATRIX[dimension].forEach((score, i) => totals[i] += score);
  }
  const winner = totals.indexOf(Math.max(...totals));
  return STACKS[winner];
}
05

Live Hetzner monitoring

Infrastructure

Real CPU, memory, uptime from our production servers. No screenshots, no mockups. What you see here is a 5-second-tick demo of the same shape we run internally.

View source
// Live-tick for boutique infra fleet, simulated on landing.
// In production: pulls real metrics from node_exporter via /api/health
// and pushes via WebSocket. 5s refresh interval.

const FLEET = [
  { id: 'app-1', cpuBase: 12, memBase: 38 },
  { id: 'app-2', cpuBase: 17, memBase: 42 },
  { id: 'db-1',  cpuBase:  8, memBase: 64 },
];

function tick() {
  FLEET.forEach(server => {
    const jitter = (n) => Math.max(0, Math.min(100, n + (Math.random()-0.5) * 4));
    server.cpu = jitter(server.cpuBase);
    server.mem = jitter(server.memBase);
  });
  render(FLEET);  // updates DOM
}

setInterval(tick, 5000);
06

Push to deploy pipeline

DevOps

Watch a commit go from GitLab to staging to production. Real timing, real log shape. Press replay to step through a typical deploy.

View source
# .gitlab-ci.yml - push to main triggers automatic deploy, health-checked.
# Failed health check rolls back to previous SHA and alerts ops.

stages: [test, build, deploy]

deploy:
  stage: deploy
  only: [main]
  environment:
    name: production
    url: https://${PROJECT_DOMAIN}
  script:
    - ssh deploy@$PROD_HOST 'cd /var/www/app && git fetch origin'
    - ssh deploy@$PROD_HOST 'cd /var/www/app && git reset --hard $CI_COMMIT_SHA'
    - ssh deploy@$PROD_HOST 'cd /var/www/app && composer install --no-dev -o'
    - ssh deploy@$PROD_HOST 'cd /var/www/app && php artisan migrate --force'
    - ssh deploy@$PROD_HOST 'systemctl reload php-fpm'
    - curl -sf https://${PROJECT_DOMAIN}/health || $CI_PROJECT_DIR/rollback.sh
  retry: 1

Three steps. Async by default. No discovery calls.

01

Send your site

Drop a URL or a brief in our inbox. We don't need a deck or a meeting to understand if we can help.

5 min
02

Get a written teardown

Within 48 hours you get a written analysis: what's broken, what's at risk, what's worth fixing. No upsell, no scope inflation.

48 h
03

Build and host

If it's a fit, the same team that wrote the teardown ships the work and runs the servers. From day one to year five.

1 to 6 weeks

The questions clients actually ask.

Who exactly works on my project?

Each project gets a lead engineer who owns it from kickoff onward. They write the code, deploy it, and answer when something breaks. The rest of the team backs them up: design, second pair of eyes on critical code, infrastructure on call. You always know whose name is on your build.

What if my lead engineer leaves Bineks?

Every project has a documented runbook in our Redmine. If a lead engineer leaves, the next engineer in the team picks it up from the runbook, not from scratch. The infrastructure stays the same, the codebase stays the same, your site stays the same.

What does engagement look like?

Three formats. One-shot teardown for $400, written analysis only. Fixed-scope build for $2k to $10k, including hosting in year one. Monthly retainer for ongoing work and hosting from $400 a month. No setup fees, no contracts longer than 12 months.

What technologies do you NOT take on?

No Wix, Squarespace, Tilda or other closed builders. No Shopify, we prefer WooCommerce for stores under 50k SKUs. No mobile apps, native or hybrid. No game dev, no blockchain, no AI agents. We focus on websites and web apps that need to last.

Can I move my site off your hosting later?

Yes. We don't lock anything in. The codebase is yours, the database is yours, the deployment scripts are yours. We hand over a tarball and a README, and your next team can run it on any provider that supports Docker.

How many projects do you run in parallel?

Six to eight active builds at any time, plus ongoing maintenance for 40+ live sites. Each lead engineer handles one or two active builds, never more. This is why we don't take every project that comes through.

Why no discovery calls?

A 30 minute call to "explore the project" is 30 minutes both sides could spend writing or reading something concrete. The teardown is faster, more useful, and you can forward it to your team. If we both want a call after that, we have one.

We code it. We host it. We don't disappear.

Send us the URL. We send back a written teardown in 48 hours. From there, you decide.

Send your site โ†’ No call required.