From 9a1da79386edf11a7988c8ab55c9aaf7810e5753 Mon Sep 17 00:00:00 2001 From: NiallJoeMaher Date: Sat, 6 Jun 2026 22:00:53 +0100 Subject: [PATCH 01/86] feat(relaunch): reposition brand to AI builders & indie hackers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Shift positioning from 'the free web developer community' / 'Ireland's largest web developer community' to 'Codú — the community for AI builders & indie hackers' across the homepage, app layouts, hero, newsletter CTA, structured data (website + organization JSON-LD), manifest, RSS feed, the advertise page, and the profile/volunteer title metadata. Also refocus SEO keywords away from generic web-dev/React terms toward the AI-builder / indie-hacker stack (LLM apps, agents, RAG, prompt engineering, vibe coding, SaaS, MVP, bootstrapping), and reconcile the advertise metrics by dropping the contradictory '100,000+' and the 'Ireland' geography claim. Co-Authored-By: Claude Opus 4.8 (1M context) --- app/(app)/[username]/page.tsx | 2 +- app/(app)/advertise/page.tsx | 6 +-- app/(app)/layout.tsx | 38 +++++++++------- app/(app)/page.tsx | 6 +-- app/(app)/volunteer/page.tsx | 3 +- app/feed.xml/route.ts | 3 +- app/layout.tsx | 44 +++++++++++-------- app/manifest.ts | 2 +- components/Hero/Hero.tsx | 10 ++--- components/NewsletterCTA/NewsletterCTA.tsx | 8 ++-- components/Sponsorship/ContactSection.tsx | 4 +- components/Sponsorship/HeroSection.tsx | 8 ++-- components/Sponsorship/OfferingsSection.tsx | 8 ++-- components/Sponsorship/SocialProofSection.tsx | 2 +- lib/structured-data/schemas/organization.ts | 2 +- lib/structured-data/schemas/website.ts | 2 +- 16 files changed, 80 insertions(+), 68 deletions(-) diff --git a/app/(app)/[username]/page.tsx b/app/(app)/[username]/page.tsx index e70439be..52bbd067 100644 --- a/app/(app)/[username]/page.tsx +++ b/app/(app)/[username]/page.tsx @@ -27,7 +27,7 @@ export async function generateMetadata(props: Props): Promise { if (profile) { const { bio, name } = profile; - const title = `${name || username} - Codú Profile | Codú - The Web Developer Community`; + const title = `${name || username} - Codú Profile | Codú - The community for AI builders & indie hackers`; const description = `${name || username}'s profile on Codú. ${bio ? `Bio: ${bio}` : "View their posts and contributions."}`; return { diff --git a/app/(app)/advertise/page.tsx b/app/(app)/advertise/page.tsx index 6e3fd36a..b8fee059 100644 --- a/app/(app)/advertise/page.tsx +++ b/app/(app)/advertise/page.tsx @@ -2,13 +2,13 @@ import type { Metadata } from "next"; import { AdvertiseClient } from "./_client"; export const metadata: Metadata = { - title: "Advertise with Codú - Reach Ireland's Developer Community", + title: "Advertise with Codú — Reach a global community of AI builders", description: - "Partner with Codú to reach 100,000+ monthly developer visits. Job postings, newsletter ads, event branding, and more. Connect with Ireland's largest web developer community.", + "Partner with Codú to reach a global community of AI builders and indie hackers. Newsletter ads, job postings, event branding, and more.", openGraph: { title: "Advertise with Codú", description: - "Connect your brand with Ireland's most engaged developer community. Sponsorship packages for job postings, newsletter advertising, and event branding.", + "Connect your brand with a global community of AI builders and indie hackers. Sponsorship packages for newsletter advertising, job postings, and event branding.", }, }; diff --git a/app/(app)/layout.tsx b/app/(app)/layout.tsx index 4f13c84a..cf28a910 100644 --- a/app/(app)/layout.tsx +++ b/app/(app)/layout.tsx @@ -8,28 +8,34 @@ import { JsonLd } from "@/components/JsonLd"; import { getOrganizationSchema } from "@/lib/structured-data"; export const metadata = { - title: "Codú - Join Our Web Developer Community", + title: "Codú — Build and ship with AI, together", description: - "Connect with fellow web developers, learn new skills, and grow together in the supportive Codú community. Sign up now for free!", + "Join AI builders and indie hackers learning to build with AI. Share what you ship and grow with people doing the same. Sign up free.", icons: [{ rel: "icon", url: "/favicon.ico" }], publisher: "Codú", applicationName: "Codú", keywords: [ - "programming", - "frontend", - "community", - "learn", - "programmer", - "article", + "AI builders", + "indie hackers", + "building with AI", + "AI engineering", + "LLM apps", + "AI agents", + "RAG", + "prompt engineering", + "vector databases", + "vibe coding", + "AI coding tools", + "ship AI products", + "build in public", + "SaaS", + "MVP", + "bootstrapping", + "side projects", + "startups", + "Next.js", + "TypeScript", "Python", - "JavaScript", - "AWS", - "HTML", - "CSS", - "Tailwind", - "React", - "Angular", - "backend", ], metadataBase: new URL("https://www.codu.co"), openGraph: { diff --git a/app/(app)/page.tsx b/app/(app)/page.tsx index d0a299f1..a674d738 100644 --- a/app/(app)/page.tsx +++ b/app/(app)/page.tsx @@ -25,9 +25,9 @@ const Home = async () => {

- Sign up today to become - a writer and get a free{" "} - invite to our Discord community. + Join builders shipping{" "} + with AI — get a free{" "} + invite to our Discord and start sharing what you build.

diff --git a/app/(app)/volunteer/page.tsx b/app/(app)/volunteer/page.tsx index cf9536db..27c6723c 100644 --- a/app/(app)/volunteer/page.tsx +++ b/app/(app)/volunteer/page.tsx @@ -2,8 +2,7 @@ import type { Metadata } from "next"; import { VolunteerClient } from "./_client"; const PAGE_URL = "https://www.codu.co/volunteer"; -const PAGE_TITLE = - "Volunteer with Codú — Help Build Ireland's Largest Dev Community"; +const PAGE_TITLE = "Volunteer with Codú — Help grow our community"; const PAGE_DESCRIPTION = "Join the team behind Codú. We're recruiting volunteer marketers and event organisers to help run meetups, newsletters, partnerships, and socials across the Irish tech ecosystem."; diff --git a/app/feed.xml/route.ts b/app/feed.xml/route.ts index e14792df..d08add99 100644 --- a/app/feed.xml/route.ts +++ b/app/feed.xml/route.ts @@ -6,7 +6,8 @@ import { getAllPosts } from "@/server/controllers/post"; export async function GET() { const feed = new RSS({ title: "Codú", - description: "Codú - A blog for web developers.", + description: + "Codú — articles and tutorials for AI builders and indie hackers.", generator: "RSS for Node and Next.js", feed_url: "https://www.codu.co/feed.xml", site_url: "https://www.codu.co/", diff --git a/app/layout.tsx b/app/layout.tsx index bb4e63c4..53628fbd 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -16,34 +16,40 @@ import { Suspense } from "react"; // @TODO layout app in way that doesn't need to use client session check export const metadata = { - title: "Codú - The Web Developer Community", + title: "Codú — The community for AI builders & indie hackers", description: - "A free network and community for web developers. Learn and grow together.", + "Codú is the community for AI builders and indie hackers. Learn to build with AI, share what you ship, and grow with people doing the same.", icons: [{ rel: "icon", url: "/favicon.ico" }], publisher: "Codú", applicationName: "Codú", keywords: [ - "programming", - "frontend", - "community", - "learn", - "programmer", - "article", + "AI builders", + "indie hackers", + "building with AI", + "AI engineering", + "LLM apps", + "AI agents", + "RAG", + "prompt engineering", + "vector databases", + "vibe coding", + "AI coding tools", + "ship AI products", + "build in public", + "SaaS", + "MVP", + "bootstrapping", + "side projects", + "startups", + "Next.js", + "TypeScript", "Python", - "JavaScript", - "AWS", - "HTML", - "CSS", - "Tailwind", - "React", - "Angular", - "backend", ], metadataBase: new URL("https://www.codu.co"), openGraph: { - title: "Codú - The Web Developer Community", + title: "Codú — The community for AI builders & indie hackers", description: - "A free network and community for web developers. Learn and grow together.", + "Codú is the community for AI builders and indie hackers. Learn to build with AI, share what you ship, and grow with people doing the same.", url: "https://www.codu.co", siteName: "Codú", images: [ @@ -51,7 +57,7 @@ export const metadata = { url: "https://www.codu.co/images/og/home-og.png", width: 1200, height: 630, - alt: "Codú Community", + alt: "Codú — the community for AI builders & indie hackers", }, ], locale: "en_US", diff --git a/app/manifest.ts b/app/manifest.ts index e5b9fa1a..3dbde772 100644 --- a/app/manifest.ts +++ b/app/manifest.ts @@ -5,7 +5,7 @@ export default function manifest(): MetadataRoute.Manifest { name: "Codú", short_name: "Codú", description: - "A free network and community for web developers. Learn and grow together.", + "Codú is the community for AI builders and indie hackers. Learn to build with AI, share what you ship, and grow with people doing the same.", start_url: ".", display: "standalone", background_color: "#fff", diff --git a/components/Hero/Hero.tsx b/components/Hero/Hero.tsx index 3fed42b5..11384702 100644 --- a/components/Hero/Hero.tsx +++ b/components/Hero/Hero.tsx @@ -230,13 +230,13 @@ export default function Hero() { id="hero-heading" className="text-2xl font-semibold text-white sm:text-4xl md:text-4xl" > - The free web - developer community + The community for{" "} + AI builders & + indie hackers

- {`Codú's community offers hundreds of tutorials, an online community, and answers - questions on a wide range of web development topics. Sign up for a free account today - and join the community.`} + {`Learn to build with AI, share what you ship, and grow with people doing the same. + Tutorials, a community, and a weekly brief on what's actually working. Join free.`}

diff --git a/components/NewsletterCTA/NewsletterCTA.tsx b/components/NewsletterCTA/NewsletterCTA.tsx index 9444f60f..3c25acb0 100644 --- a/components/NewsletterCTA/NewsletterCTA.tsx +++ b/components/NewsletterCTA/NewsletterCTA.tsx @@ -6,14 +6,14 @@ const NewsletterCTA = ({ isSubscribed = false }: NewsletterCTAProps) => { return (
-

Level up every week

+

Build something every week

- Join developers getting weekly curated content: top articles, - tutorials, and resources from the community. + Join builders getting weekly curated content: what's working in + AI, plus top articles, tutorials, and tools from the community.

- {["Articles", "Tutorials", "Resources"].map((item) => ( + {["AI", "Tutorials", "Tools"].map((item) => (

- Ready to reach our global developer community? Fill out the form and - we'll get back to you within 24 hours. + Ready to reach our global community of builders? Fill out the form + and we'll get back to you within 24 hours.

diff --git a/components/Sponsorship/HeroSection.tsx b/components/Sponsorship/HeroSection.tsx index cdee8a07..e605b640 100644 --- a/components/Sponsorship/HeroSection.tsx +++ b/components/Sponsorship/HeroSection.tsx @@ -19,14 +19,14 @@ export function HeroSection() { 20,000+ {" "} - Developers Every Month + Builders Every Month {/* Subheadline */}

- Connect your brand with one of the most engaged web developer - communities online. From newsletter ads to event sponsorships, we help - you hire and grow. + Connect your brand with one of the most engaged communities of AI + builders and indie hackers online. From newsletter ads to event + sponsorships, we help you hire and grow.

{/* Single CTA - research shows single CTA converts 266% better */} diff --git a/components/Sponsorship/OfferingsSection.tsx b/components/Sponsorship/OfferingsSection.tsx index 32f2e6c4..3f4f4468 100644 --- a/components/Sponsorship/OfferingsSection.tsx +++ b/components/Sponsorship/OfferingsSection.tsx @@ -11,19 +11,19 @@ const offerings = [ icon: EnvelopeOpenIcon, title: "Newsletter Advertising", description: - "Feature your company in our weekly newsletter reaching 4,000+ engaged developers who actually read their emails.", + "Feature your company in our weekly newsletter reaching 4,000+ engaged builders who actually read their emails.", }, { icon: CalendarDaysIcon, title: "Event Sponsorship", description: - "Put your brand in front of 100+ developers at our monthly meetups and annual hackathons. Build real connections.", + "Put your brand in front of 100+ builders at our meetups and hackathons. Build real connections.", }, { icon: GlobeAltIcon, title: "Website & Job Board", description: - "Reach 20,000+ monthly visitors with banner placements and job postings to a highly engaged developer audience.", + "Reach 20,000+ monthly visitors with banner placements and job postings to a highly engaged audience of AI builders.", }, { icon: DocumentTextIcon, @@ -43,7 +43,7 @@ export function OfferingsSection() {

Every partnership is tailored to your goals. Here's how we can - help you connect with our developer community. + help you connect with our community of builders.

diff --git a/components/Sponsorship/SocialProofSection.tsx b/components/Sponsorship/SocialProofSection.tsx index fc065f31..0f825406 100644 --- a/components/Sponsorship/SocialProofSection.tsx +++ b/components/Sponsorship/SocialProofSection.tsx @@ -71,7 +71,7 @@ export function SocialProofSection() {

“Partnering with Codú gave us direct access to a thriving - developer community. The engagement is genuine and the team is + community of builders. The engagement is genuine and the team is fantastic to work with.”