The client
CNT Factory is an online publication covering trends in automotive and product design. Its founder has 25 years of experience in the industry, working in Germany, England, the US and Japan. The site publishes reports on trends, materials, technology, sustainability and designers. Some reports are free to read, and most are for paying members only.
The challenge
The site ran on an outdated WordPress install that had become hard to maintain and slow to load. Its membership and subscription setup depended on WordPress, and the business depended on that setup. Any move had to bring over more than 500 reports and carry every existing paying member across. Members had to be able to log in with their current password, and their Stripe subscriptions had to keep billing without anyone signing up again.
The solution
I rebuilt the site from scratch as a custom Laravel application. Every report, image, category and tag was imported from the old WordPress database, so no content was lost. Member accounts were imported along with their Stripe subscription details.
A reading experience built around the reports
Reports: more than 530 reports, each with a large lead image, a "Latest Report" feature at the top and a clean two-column grid with infinite scroll
Categories: Trends, Materials, Technology, Sustainability, Benchmark and Inspiration, each with its own page and its own navigation
Homepage: a curated Latest & Featured layout, where the team picks the featured report, plus an Inspiration section
You May Also Like: related reports at the end of each article, matched by category and then by tag
The site works fully on mobile.
A membership business that runs itself
Over 380 of the reports are for members only. Visitors who aren't subscribed see a preview of each report that fades out into a "Subscribe Now" prompt. The images in locked reports are blurred and greyed out, and they're harder to save or drag off the page. Readers subscribe through Stripe and get a branded welcome email. From their own account dashboard they can see their renewal date, cancel, change their mind before the period ends ("Keep My Subscription"), or re-subscribe later. They can also reset their password with an emailed code. None of this needs the team to step in. Stripe webhooks keep each member's status in sync with billing, so a failed payment or a cancellation updates their access automatically.
A seamless move for existing members
Members from the old site sign in with the same email and password as before. Older WordPress passwords are checked on first login and then quietly upgraded to modern security. Their live Stripe subscriptions were matched to their new accounts, so billing carried on without interruption.
A website the client controls
A new admin panel lets the CNT Factory team write and schedule reports, manage categories, tags, members and admins, and see each member's subscription status and renewal date at a glance. Scheduled reports go live automatically at the time the team sets. Stripe and email settings are managed in the admin panel too, without a developer.
Built to be fast
Every image is converted to the modern WebP format automatically and stored in three sizes, so each page loads only the size it needs. Existing images were re-processed the same way. Fonts are hosted on the site itself, and caching and compression are set up at both the server and Cloudflare. The site's Google PageSpeed score went up as a result.
The launch
The new site was built and tested on a separate staging subdomain. It replaced the WordPress site in a single planned cutover. Old WordPress article links redirect permanently to their new addresses, so existing links and search rankings keep working. The site now runs behind Cloudflare.
The results
Over 530 reports moved across with nothing lost, and old links still work
Existing members kept their logins and their subscriptions with no interruption
Subscriptions are sold, renewed, cancelled and restored fully online
The team publishes, schedules and manages members without a developer
The site is faster and easier to read on every device
Tech stack: Laravel, Filament, Alpine.js, Stripe, Brevo, Cloudflare