Back to Portfolio
Case Study·Be Creative Events

From becreative.qa to bce.qa Without Breaking Google

Our agency got acquired, rebranded from marketing to events, and moved domains from becreative.qa to bce.qa. I rebuilt the site and migrated all 102 indexed URLs without losing any of them.

Stack

Next.js 16TypeScriptTailwind CSS 4GSAPFramer MotionResend

Live at

bce.qa

The backstory

I work at Be Creative. The company used to be called Be Creative Brand Studio, a marketing agency in Qatar. Branding, campaigns, media production. In August 2025 the current management took over and shifted the focus entirely to event management: desert festivals, government ceremonies, large-scale national celebrations, brand activations.

The rebrand wasn't just a name change. "Be Creative Brand Studio" became "Be Creative Events", the identity shortened to BCE, and the domain moved from becreative.qa to bce.qa. Our old website was a bilingual WordPress build on a purchased theme. It had the wrong name, wrong services. Nothing on it was still accurate.

I needed to do three things: build a site that actually feels like the events we produce. Make the transition visible so existing clients understand what changed. And move eight years of SEO from the old domain to the new one without breaking anything.

The constraints

Our old site ran on a purchased WordPress theme. It was one of the better options when it was originally built, but for a company that now produces desert festivals and national celebrations, it was a credibility problem. Clients at this level judge you by your website before they pick up the phone. So instead of trying to update the old site, I decided to rebuild from scratch. The first five seconds of the new site had to earn the positioning.

Then there's the transition. We had existing clients, vendors, and government contacts who knew "Be Creative Brand Studio". The site couldn't show up looking like a brand new entity. Our track record, project history, and relationships all carry over, and the site needed to make that obvious.

And the migration. Our old domain had 102 indexed URLs, Search Console history going back years, and backlinks from Doha News, Qatar Development Bank, and Mada. The old WordPress site was bilingual (English and Arabic with full RTL), so half the index was Arabic URL-encoded slugs. The new site needed to be English only to get it out the door faster, but those Arabic URLs still had to go somewhere. Dropping the domain would have thrown away eight years of ranking signals.

The hero

The site opens with a loading sequence: five animated bars in the brand gradient, then the hero lands. "b.creative events" sits on screen until you scroll, and as you do, it collapses down to "bce". That's the whole transition in a few characters.

If you knew the old brand, the animation answers the obvious question: same company, different name. If you didn't, you just see a name resolve and move on. Either way it works. It's heavier than a typical hero, deliberately. We sell the experience of being at our events. The opening of the site should feel like one.

The site

Next.js 16 App Router, TypeScript strict mode, Tailwind 4. Core Black #101820 as the canvas, Red Spark #E0251C for CTAs, Codec Pro typeface family hosted locally.

Our biggest selling point is the events we've already done, so the portfolio section on the homepage uses a pinned horizontal scroll via GSAP ScrollTrigger. You can't just scroll past it. Framer Motion handles component transitions, and Lenis provides smooth scrolling on desktop (disabled on touch, where native momentum is already there).

All project, team, service, and client data lives in typed constants that feed both the route handlers and the sitemap generator. The sitemap can't drift from the actual content because they share the same source.

The domain migration

This was the part that couldn't go wrong. The Google Search Console index report for becreative.qa showed 102 indexed URLs, not the 2,300+ in the raw crawl (most were noindex'd taxonomy pages). Those 102 were the only ones that mattered.

I mapped every one against the new site's routes: 22 direct matches, 12 renames, 14 deprecated projects falling back to /portfolio, and 32 Arabic variants including URL-encoded slugs like /ar/project/كوفي-داون-اندر//portfolio/coffee-down-under. Half the indexed URLs were Arabic paths from the old bilingual site, now pointing at an English only domain. Each one needed an explicit redirect to its English equivalent.

A single middleware.ts fires only on the legacy host, pattern-matches against a lookup table, and runs decodeURIComponent() before lookup so the map can use readable Arabic keys. Fallbacks cover the rest: any unmapped /project/* path goes to /portfolio, any /wp-content/* goes to /.

Both domains point at the same Vercel deployment as aliases (not Vercel-native redirects, which would have bypassed the middleware). Microsoft 365 MX records and both DKIM selectors stayed untouched so email kept working.

I filed a Change of Address in Google Search Console. Google's validation passed: 301 verified, both properties verified, sample page redirect confirmed. New sitemap submitted on the new property.

All 102 old URLs resolve to their new location in 2 HTTP hops. Arabic URL-encoded slugs decode cleanly. Zero indexed URL loss.

Internal links hub

We share the same files all the time: legal documents, brand assets, the latest company profile. It used to be email attachments and WeTransfer links. So I built three pages into the site instead: /docs for official documents (commercial registration, licenses, tax card, etc.), /brand for logos and brand pack, and /profile for the company profile PDF. All behind noindex so they don't show up in Google, but anyone with the link can access them.

Screenshot of bce.qa/profile page showing the company profile download

Performance

Lighthouse desktop: Performance 98, Accessibility 94, Best Practices 96, SEO 100. Mobile: Performance 77, Accessibility 94, Best Practices 96, SEO 100.

Lighthouse desktop scores: Performance 98, Accessibility 94, Best Practices 96, SEO 100
Lighthouse mobile scores: Performance 77, Accessibility 94, Best Practices 96, SEO 100

Biggest win: replacing the YouTube iframe with a click-to-play facade. That cut ~770 KB of third-party JS, 99 KB of third-party CSS, and 630 ms of script evaluation from the critical path. It also removed all third-party cookies before user interaction.

The mobile score caps at 77 because of the hero animation + GSAP + Lenis stack. On a different project I'd split the smooth scroll provider per route. On this one, the feel was worth the tradeoff.