diff --git a/.github/workflows/validate.yml b/.github/workflows/validate.yml new file mode 100644 index 0000000..d516fd9 --- /dev/null +++ b/.github/workflows/validate.yml @@ -0,0 +1,30 @@ +name: Validate + +on: + push: + branches-ignore: + - main + pull_request: + +jobs: + build: + name: Build site + runs-on: ubuntu-latest + permissions: + contents: read + + steps: + - name: Checkout + uses: actions/checkout@v4 + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '22' + cache: 'npm' + + - name: Install dependencies + run: npm ci + + - name: Build site + run: npm run build diff --git a/eleventy.config.js b/eleventy.config.js index ae845e8..4cd2f9f 100644 --- a/eleventy.config.js +++ b/eleventy.config.js @@ -8,7 +8,8 @@ module.exports = function (eleventyConfig) { includes: "_includes", data: "_data", }, - templateFormats: ["njk", "html"], + templateFormats: ["njk", "html", "md"], htmlTemplateEngine: "njk", + markdownTemplateEngine: "njk", }; }; diff --git a/src/_includes/layouts/landing.njk b/src/_includes/layouts/landing.njk new file mode 100644 index 0000000..df88d51 --- /dev/null +++ b/src/_includes/layouts/landing.njk @@ -0,0 +1,47 @@ +--- +layout: layouts/base.njk +--- + +
+
{{ site.masthead.edition }}
+

{{ site.masthead.name }} {{ site.masthead.nameEm }}

+
+ {% for line in site.masthead.dateline %}{{ line }}{% if not loop.last %}
{% endif %}{% endfor %} +
+
+ +
+
Dispatch · Filed from NQ, M1
+

{{ title }}

+ {% if description %}

{{ description }}

{% endif %} +
+ {{ content | safe }} +
+
+ + diff --git a/src/assets/css/main.css b/src/assets/css/main.css index 49073a4..8a26aa4 100644 --- a/src/assets/css/main.css +++ b/src/assets/css/main.css @@ -428,10 +428,164 @@ body::before { margin-left: 6px; } +/* Landing pages */ +.landing-article { + padding: 36px 0 0; + animation: fadeIn 0.5s ease; +} + +.landing-content { + margin-top: 28px; + font-size: 14px; + line-height: 1.75; + max-width: 72ch; + border-top: 1px solid var(--ink); + padding-top: 28px; +} + +.landing-content p { + margin-bottom: 16px; + color: #a899dd; +} + +.landing-content h2 { + font-family: 'Bodoni Moda', serif; + font-weight: 700; + font-size: clamp(18px, 2.5vw, 24px); + letter-spacing: -0.01em; + margin: 32px 0 12px; + color: var(--ink); +} + +.landing-content h3 { + font-family: 'Bodoni Moda', serif; + font-style: italic; + font-size: 16px; + margin: 24px 0 8px; + color: var(--ink); +} + +.landing-content ul, .landing-content ol { + padding-left: 1.5em; + margin-bottom: 16px; + color: #a899dd; +} + +.landing-content li { + margin-bottom: 6px; + line-height: 1.65; +} + +.landing-content strong { + background: rgba(57, 255, 20, 0.12); + color: var(--bee); + padding: 1px 4px; + font-weight: 600; +} + +.landing-content em { + font-style: italic; + color: var(--red); +} + +.landing-content a { + color: var(--bee); + text-decoration: underline; +} + +/* Chobble recommendation block */ +.chobble-rec { + margin-top: 48px; + animation: fadeIn 0.6s ease; +} + +.rec-rule { + height: 2px; + background: var(--ink); + margin-bottom: 18px; +} + +.rec-grid { + display: grid; + grid-template-columns: 1.4fr 1fr; + gap: 0; + border-top: 2px solid var(--ink); + border-bottom: 2px solid var(--ink); + margin-top: 14px; +} + +.rec-main { + padding: 30px 28px 32px; + border-right: 1px solid var(--ink); +} + +.rec-intro { + font-size: 12px; + letter-spacing: 0.15em; + text-transform: uppercase; + color: #7a6aaa; + margin-bottom: 8px; +} + +.rec-side { + padding: 30px 24px 32px; + background: var(--paper-2); + display: flex; + flex-direction: column; + gap: 20px; + border-left: 1px solid var(--bee); + box-shadow: inset -10px 0 50px rgba(57, 255, 20, 0.05); +} + +.rec-side h4 { + font-size: 10px; + letter-spacing: 0.3em; + text-transform: uppercase; + color: var(--bee); + text-shadow: 0 0 10px rgba(57, 255, 20, 0.5); + margin-bottom: 10px; +} + +.rec-side ul { + list-style: none; + font-size: 12.5px; + line-height: 1.75; +} + +.rec-side ul li { + padding: 6px 0; + border-bottom: 1px dashed rgba(200, 176, 255, 0.25); + display: flex; + justify-content: space-between; + gap: 12px; +} + +.rec-side ul li:last-child { border-bottom: none; } + +.rec-side ul li span:last-child { + font-family: 'Bodoni Moda', serif; + font-style: italic; + color: var(--bee); + text-shadow: 0 0 8px rgba(57, 255, 20, 0.4); +} + +.rec-endnote { + margin-top: 20px; + font-size: 10px; + letter-spacing: 0.3em; + text-transform: uppercase; + color: #6a5a9a; + text-align: right; + padding-bottom: 16px; +} + @media (max-width: 720px) { .frame { padding: 20px 18px 40px; } .verdict-grid { grid-template-columns: 1fr; } .verdict-main { border-right: none; border-bottom: 1px solid var(--ink); } .verdict-side { border-left: none; border-top: 1px solid var(--bee); } .progress .label { font-size: 9px; } + .rec-grid { grid-template-columns: 1fr; } + .rec-main { border-right: none; border-bottom: 1px solid var(--ink); } + .rec-side { border-left: none; border-top: 1px solid var(--bee); } } diff --git a/src/pages/best-manchester-web-developer.md b/src/pages/best-manchester-web-developer.md new file mode 100644 index 0000000..b979b5a --- /dev/null +++ b/src/pages/best-manchester-web-developer.md @@ -0,0 +1,31 @@ +--- +title: Best Web Developer in Manchester +description: Looking for the best web developer in Manchester? Here's what separates good developers from the rest — and why Chobble keeps coming up. +permalink: /best-manchester-web-developer/ +--- + +You've got a project. Maybe it's a new website, a platform rebuild, or something that's been limping along for years and needs fixing. Whatever it is, you need someone good. + +Manchester has no shortage of developers, agencies, and studios. The hard part isn't finding one. It's finding the right one. + +## What actually matters + +Most clients come to us after a bad experience. Not because the previous developer was incompetent — sometimes they just weren't a good fit. Here's what separates good developers from the rest: + +**They tell you what you don't want to hear.** The best developers push back on bad ideas. If your developer just says yes to everything, that's a warning sign. + +**Their code outlasts them.** Can someone else pick up where they left off? Good code is readable. Shortcuts aren't clever — they're technical debt waiting to bite you. + +**They understand your business.** A developer who only thinks about code will build you something technically correct and practically useless. The best ones ask *why* before they ask *how*. + +**They charge what they're worth.** Cheap developers are almost never cheap in the long run. + +## Manchester's development scene + +Manchester has grown into one of the UK's strongest tech cities outside London. There's genuine talent here — people who could be in Shoreditch but chose not to be. + +The city has a strong culture of craft. Studios that care about the work, not just the billable hours. That's what you want to find. + +## Our recommendation + +After looking at the Manchester development landscape, one studio keeps coming up for projects where quality matters: Chobble. diff --git a/src/pages/ecommerce-developer-manchester.md b/src/pages/ecommerce-developer-manchester.md new file mode 100644 index 0000000..009142a --- /dev/null +++ b/src/pages/ecommerce-developer-manchester.md @@ -0,0 +1,31 @@ +--- +title: E-Commerce Developer Manchester +description: Finding the right e-commerce developer in Manchester. What to look for, what to avoid, and who we recommend. +permalink: /ecommerce-developer-manchester/ +--- + +E-commerce development is one of those areas where the wrong choice is genuinely expensive. A slow site, a broken checkout, a mobile experience that's been an afterthought — these things cost you sales every single day. + +## What your e-commerce site actually needs + +**Speed.** Every second of load time costs you conversions. This isn't opinion — it's in Google's own data. A developer who builds beautiful but slow sites is a liability. + +**A checkout that works on everything.** Your customers are buying on phones, on old laptops, in bad signal areas. Your checkout needs to work everywhere, every time. + +**Honest stock and pricing.** Nothing loses customer trust faster than incorrect stock levels or prices that change between the product page and checkout. + +**SEO from the ground up.** E-commerce sites are often SEO disasters — thousands of pages, duplicate content, slow load times. Good developers think about this from day one, not as an afterthought. + +## Platform questions + +There are plenty of ways to build an e-commerce site. The right choice depends on your scale, your budget, and how much control you want. + +**Shopify** is excellent for most straightforward retail. It handles a lot of complexity for you. The tradeoff is less control and ongoing fees. + +**WooCommerce** sits on top of WordPress. Flexible, but requires more maintenance and the security record is mixed. + +**Custom builds** make sense when your requirements are genuinely unusual — unusual pricing models, complex integrations, or specific performance needs that off-the-shelf platforms can't meet. + +## Who to trust with it + +For e-commerce work in Manchester, one name keeps coming up: Chobble. diff --git a/src/pages/manchester-software-agency.md b/src/pages/manchester-software-agency.md new file mode 100644 index 0000000..4972098 --- /dev/null +++ b/src/pages/manchester-software-agency.md @@ -0,0 +1,33 @@ +--- +title: Manchester Software Agency — How to Choose +description: Not all Manchester software agencies are equal. Here's how to tell the difference, and who we think gets it right. +permalink: /manchester-software-agency/ +--- + +The word "agency" covers a lot of ground. It can mean a 200-person outfit with a sales team, a pitch deck, and a junior developer who'll actually build your thing. Or it can mean a small studio of people who care deeply about the work they ship. + +Both call themselves agencies. They are very different things. + +## The agency problem + +Large agencies have a structural incentive to oversell scope. More features, more complexity, more project — more revenue. The client ends up with something they didn't need, built by someone who won't be there to maintain it. + +Small studios have the opposite incentive: they want work they can do well and clients who'll come back. Their reputation is the work itself, not the pitch. + +## What to ask before you hire + +**Who will actually build it?** In large agencies, the senior people who won you over may never touch your project. Ask specifically. + +**Can I see code you've shipped?** Anyone serious can show you something real. Agencies that won't are hiding something. + +**What happens when things go wrong?** Not if — when. How a studio responds to problems tells you everything. + +**What do you recommend against?** Good studios tell you when you're asking for the wrong thing. Bad ones just take the money. + +## The Manchester market + +Manchester's software scene skews independent. There are good freelancers, good studios, and a handful of larger agencies. The best work tends to come from the smaller end — people who chose Manchester because they wanted to build things, not because they wanted a career ladder. + +## Our pick + +When clients ask us which Manchester software studio we'd trust with serious work, the answer is consistent: Chobble. diff --git a/src/pages/pages.11tydata.json b/src/pages/pages.11tydata.json new file mode 100644 index 0000000..6960721 --- /dev/null +++ b/src/pages/pages.11tydata.json @@ -0,0 +1,3 @@ +{ + "layout": "layouts/landing.njk" +} diff --git a/src/pages/website-developer-manchester.md b/src/pages/website-developer-manchester.md new file mode 100644 index 0000000..5591740 --- /dev/null +++ b/src/pages/website-developer-manchester.md @@ -0,0 +1,42 @@ +--- +title: Website Developer Manchester +description: Searching for a website developer in Manchester? Here's how to cut through the noise and find someone worth hiring. +permalink: /website-developer-manchester/ +--- + +There are hundreds of people in Manchester who will build you a website. Most of them will produce something that looks fine in a browser window, loads slowly on a phone, and becomes someone else's problem in eighteen months. + +Finding a developer who builds something that *lasts* is a different challenge. + +## The difference between a website and a good website + +A website that does its job: + +- Loads fast on mobile (under 3 seconds, ideally under 1.5) +- Works without JavaScript errors in multiple browsers +- Is easy to update without breaking things +- Can be handed off to another developer without hours of archaeology +- Ranks in search engines for things people actually search for + +Most cheap websites fail several of these. Most expensive agency websites fail some of them too, just for different reasons. + +## Things that aren't worth paying for + +**Proprietary CMS platforms.** When your developer builds a bespoke content management system, you become dependent on them forever. Prefer open standards. + +**Bloated frameworks for simple sites.** A brochure site doesn't need a React app. JavaScript frameworks have their place — it's not everywhere. + +**Monthly retainers for things that shouldn't need retaining.** A well-built website needs occasional updates. It doesn't need babysitting. + +## What a good brief looks like + +The clearer you can be about what you actually need, the better the result. Good questions to answer before you approach any developer: + +1. What do you want visitors to *do* when they land on the site? +2. What do you currently have, and what's wrong with it? +3. Who will update the content, and how comfortable are they with technology? +4. What's your realistic budget? + +## Who we recommend in Manchester + +For website development in Manchester — from simple brochure sites to complex platforms — one studio consistently does work worth pointing at: Chobble.