← Selected work

Case study

PlasticFree · Subscription SaaS platform

Building the platform behind a global materials intelligence service.

As sole developer, I turned an evolving startup concept into a collaborative subscription platform combining structured publishing, visual search, organisation accounts, payments and shared project collections.

Role
Sole product-focused full-stack developer
Scope
CMS, search, media, subscriptions and collaboration
Timeframe
April 2022–present
PlasticFree homepage screen grab
Visual discovery · materials, makers, insights and inspiration brought together in one searchable platform

Turning an ambitious creative idea into a working digital product.

PlasticFree was conceived as a design and materials intelligence platform helping creative teams discover alternatives to conventional plastic and make more informed decisions about products and packaging.

My involvement began in April 2022, when the startup had a strong purpose and a broad outline of what it wanted to create, but many of the product decisions still needed to be made. Working through workshops and weekly meetings, I helped translate an evolving vision into defined user journeys, content structures, permissions, subscription rules and buildable priorities.

Working from Made Thought’s brand and initial creative direction, I collaborated with Integral to extend the design across the complete digital product, including responsive behaviour, application states and functionality that emerged during development. When both design teams had completed their involvement, I continued resolving the remaining interface and product-design decisions alongside all development work.

PlasticFree launched in January 2023. I was the sole developer responsible for its architecture, data model, CMS, frontend, backend, search, media processing, Stripe integration and deployment.

1,689subscription seats at peak
6,720files in the managed media library
35,826recorded content updates

Creating enough certainty to build without closing down good ideas.

Early requirements moved frequently as the team explored what the product could become. My role was to turn those discussions into decisions the platform could support coherently.

Regular workshops were as important as the code. I mapped relationships between content, users, organisations, subscriptions and collaborative projects; surfaced decisions that were blocking progress; and helped the team commit to a launch scope while leaving sensible room for the product to evolve.

01

Product shaping

Converted a loose and changing outline into clear workflows, product rules and delivery priorities.

02

Architecture

Designed the shared structures connecting editorial content, media, subscriptions, organisations and projects.

03

Design translation

Extended the creative direction into responsive application screens, system states and interactions.

04

Full-stack delivery

Built and integrated the complete platform as its sole developer, from publishing tools to payments.

A controlled publishing system for a distributed team of specialists.

PlasticFree brought together staff and freelance contributors overseen by a head of content. They needed the freedom to create at pace without weakening editorial control or making mistakes difficult to reverse.

I extended SimpleCog with configurable roles covering contributors, editors, heads of content, core administrators and super administrators. Access could be limited by responsibility, contributors could submit work without publishing it, and editors could approve, reject or return content for further work.

Materials, makers, insights, inspiration and “On Our Radar” updates each had page-aware editing templates with blocks suited to that content type. Underneath, they shared the same core structures, keeping the editorial experience consistent while allowing each format to behave differently. “On Our Radar” items could work as lightweight overlays or be linked directly, opening the relevant item when the page loaded.

Editorial workflowFreedom to create. Control where it matters.
Workflow · a suitable place for an editor, revision history or approval-state animation

Restoring an earlier version without duplicating everything that had not changed.

A busy editorial team needed a complete history of who changed what and the confidence that previous content could be restored safely.

I built versioning around the individual content blocks that made up a page. When an editor created a revision, unchanged blocks were referenced from the existing version rather than saved again. Only an altered text, image or layout block created a new record, which the new page version then indexed.

This preserved a detailed history while avoiding full duplicate copies of every page. Editors could see authorship and changes, reinstate an earlier version when required and continue working with the familiar block-based interface.

Record every meaningful change without storing the same unchanged content repeatedly.

Versioning principle

High-quality source assets, transformed only when the product needed them.

The visual quality of the platform depended on a large, searchable pool of material photography, brand assets, maker imagery, insight graphics and “On Our Radar” media.

Content creators could upload original files at full resolution—including source images as large as 15MB—organise them by purpose and find them again through the media library. Editors could select the important focal point so automated crops retained the subject across different layouts and screen shapes.

Instead of eagerly generating a generic collection of sizes for every upload, the platform created an optimised derivative only when an image was first required in a particular context. That avoided producing and storing variants that might never be used while still removing manual image preparation from the editorial workflow.

Making a highly visual library feel immediate.

Search had to work across every major content type and respond as users typed, while returning image-rich results without repeatedly querying and rendering the full underlying content.

I created a condensed, compiled representation of searchable page content and cached it separately from the primary database. A second cache stored reusable result sets. As someone typed, each keystroke narrowed the results already found by the previous query rather than starting from the entire library again.

Results were weighted according to relevance signals such as the frequency of the search term. Editors could also associate alternative or commonly misspelled terms without making the visible page copy repetitive. Previous and common searches remained cached until a relevant CMS update invalidated them.

Users could then refine results through the full set of structured properties attached to materials, makers and other content. In a recent informal spot check, a search view containing 19 large images returned in approximately 106ms.

2,400+structured materials, makers, insights and other records
8,346recorded searches
≈106msrecent informal search-response spot check

Stripe billing that felt like part of PlasticFree—not a separate service.

The original product combined free discovery with paywalled content for students, individuals, teams and larger organisations. Plans were seat-based, with additional sharing and administration features above the personal tier.

I integrated Stripe throughout custom PlasticFree interfaces rather than sending users away to a generic billing portal. The platform handled trials, discounts, upgrades, downgrades, cancellations, failed payments, invoices and grandfathered subscriptions, together with confirmation and transactional emails.

Webhooks kept product access aligned with the billing state. Successful payments unlocked content immediately. If a renewal failed, members retained enough account access to resolve the problem while paid content became unavailable. Organisation administrators could invite or remove people and manage seats themselves, while PlasticFree staff retained equivalent support controls in the CMS.

Reducing seats also raised a product problem beyond billing: what should happen to work belonging to a departing member? Administrators could transfer that person’s projects to another account so organisational knowledge was not lost with the seat.

Turning discovery into shared working knowledge.

Finding a material or idea was only the beginning. Members needed a way to collect useful information around the real products and packaging challenges they were working on.

Users could save materials, makers, insights and inspiration into visual projects. Projects could remain private, be shared across an organisation or be opened to specific invited collaborators, who could contribute to the same collection.

The audience ranged from students and individual creators to teams within organisations including Logitech, HP, Unilever and Crayola. The same underlying model needed to remain understandable for one person while supporting company-wide membership and knowledge sharing.

01

Discover

Search and filter connected content across materials, makers, insights and inspiration.

02

Collect

Save relevant items into a visual project built around a real piece of work.

03

Share

Keep a project private, share it company-wide or invite selected collaborators.

04

Retain

Transfer projects when seats changed so useful organisational work remained accessible.

1,622projects created
26,882items saved into projects
Private → sharedflexible collaboration across organisations

Technical decisions driven by the shape of the product.

Save versions at block level rather than duplicating pages

Each revision referenced unchanged blocks from the existing version and stored only the blocks that had actually changed, preserving history without multiplying identical records.

Generate image variants on demand

Full-resolution originals remained available, while the system created an optimised crop only when a particular screen and layout first required it.

Separate searchable content from live page rendering

A condensed cached search representation and reusable result caches delivered responsive incremental filtering without repeatedly scanning complete page content.

Treat billing events as product events

Stripe webhooks updated permissions, seats and access immediately, while custom interfaces handled the surrounding member and organisation workflows.

Adapting the platform as the commercial model changed.

The subscription platform reached 1,689 seats at its peak. As the organisation’s priorities and operating model evolved, PlasticFree moved away from paid membership and opened its content more widely.

The platform was repositioned as a freely accessible information resource maintained by a smaller, mission-led team. I implemented the removal of subscriptions and paywalls while preserving the editorial content, search and underlying user experience.

Because billing, access rules and content had been kept as distinct concerns, the technical change was surprisingly contained. Rather than dismantling the product, I could remove the access gates and change the central entitlement decision so existing content became available to free accounts.

The experience reinforced an important product lesson: sophisticated software, valuable content and a durable commercial proposition have to evolve together. Engineering can enable a business model and help it change direction, but it is only one part of the product’s long-term success.

Building the product meant connecting editorial, commercial and technical thinking.

PlasticFree was not a collection of isolated features. Its value depended on contributors publishing trustworthy information, people finding it quickly, teams organising it around real work and the subscription model controlling how those capabilities were shared.

Delivering that as the sole developer required me to work across product definition, UX, system architecture and hands-on implementation—and to keep those perspectives connected as the startup’s ideas and commercial needs changed.