Case study

Tinybee Toys

A wooden-toy brand catalog site — 40+ SKUs across 5+ categories, browsable by filter with per-product galleries and a contact form, built solo as an Angular SPA.

Role
Front-end developer
Contract
2 Months
Mode
Solo
Headline result
40+ SKUs single-page catalog
Angular 11TypeScriptBootstrap 4RxJSng-bootstrap
Tinybee Toys cover screenshot

Context

Tinybee is a wooden-toy brand for kids — alphabet puzzles, pull-along animals, 3D puzzles, teethers. They needed a marketing and catalog site to sit at tinybee.toys, ahead of a longer-term e-commerce build. I designed and built it end-to-end.

The problem

The brand had product photography, copy and a category structure but no web presence. The site had to present the catalog cleanly, let visitors filter by category, drill into each product's gallery and specs, and route enquiries to the founders — with no CMS budget and no backend to run.

Architecture & solution

Single-page Angular 11 app with the product catalog bundled as a versioned JSON file the components read directly. Product list, product detail and related-products are all derived from that file client-side; the contact form posts through SmtpJS to a Gmail relay so the whole site can be served as static assets. Bootstrap 4 and ng-bootstrap for layout, Owl / Slick / Isotope for the marketing carousels, PhotoViewer for the product-image lightbox.

Key decisions & tradeoffs

Ship the catalog as static JSON rather than stand up a CMS — 40+ SKUs updated occasionally didn't justify the operational cost, and a JSON file is a one-line edit for the founders. Angular over React because client is more confident on Angular. Client-side SMTP for contact rather than a serverless function, to keep hosting to a single static bucket.

Results

Shipped as the brand's public site at tinybee.toys, covering the full catalog, product detail, about and blog surfaces. Site is currently offline; the codebase is the archived artifact of that build.

Learnings

Bundling credentials into a client-side SMTP call is convenient until it isn't — a serverless mail relay would be the right call today. Bundling the catalog as JSON aged well for a small, slow-moving SKU list, but the moment you want inventory or pricing, the CMS-shaped hole shows up fast. Angular's opinionatedness was a real accelerator for a solo build at this scale.

Screens

Tinybee home page — dark header with the TinyBee wordmark and primary nav, above a full-bleed hero carousel of a toddler playing with wooden toys, with a Latest Products grid below
Our Products page — 'New Arrivals' banner above a category filter (All Products, Learning Toys, Teethers, Push & Pull Toys, 3D Puzzles) and the product grid
Classic Wooden Alphabet Puzzle detail page — large primary image, thumbnail strip, price, category tag, description and dimensions tabs, and a Related Products row
About Us — hero titled 'Our Company' above the 'Who we are & What we do?' brand copy
Contact page — hero, embedded Google map of the Sanand, Gujarat facility with address, phone and email, and the 'Send Us A Message' form
Blog index — three latest-blog cards with wooden-toy imagery, over the footer's social row and newsletter signup

Tinybee home page — dark header with the TinyBee wordmark and primary nav, above a full-bleed hero carousel of a toddler playing with wooden toys, with a Latest Products grid below

// contact

Building something like this?

If this maps to what you're planning, I can walk you through how I'd approach yours.