Internal plant and supplier catalog
A private plant and supplier catalog, from a legacy Django/MySQL system to a modern Next.js web app. 4 years in production, used daily.
A plant nursery and landscaping business in São Paulo kept its species catalog and supplier network in an old Django system hosted on PythonAnywhere with MySQL. The goal was to retire that legacy and ship a fast, pleasant, cheap-to-run internal tool.

The result is a private catalog with 218 species, 78 suppliers and 278 plant×supplier links, with instant search, light/dark themes and an admin panel to curate the collection. All access is restricted to an allow-list of e-mails.
It ran for 4 years in production, used daily in the company's operations. It was the core tool of the day-to-day business.
What I built
End-to-end design and implementation: design, front-end, back-end, database, authentication, data migration and deployment.
- Catalog with instant search by common or scientific name and paginated species listing.
- Species page with size, packaging, price and the linked suppliers.
- Supplier directory with search by name, city, neighborhood or state.
- Admin panel with CRUD for plants and suppliers, plant×supplier links and image upload.
- Fully private: allow-list login, middleware blocking everything except the login screen, and
robots.txtde-indexing the whole site. - Data migration from the legacy MySQL to Postgres.





Tech Stack
- Front-end: Next.js 15 (App Router), React 19, TypeScript, Tailwind CSS, Radix UI
- Back-end: Next.js Route Handlers / Server Actions
- Database: PostgreSQL with Drizzle ORM
- Auth: Auth.js v5 (allow-list e-mail login)
- Images: Vercel Blob
- Infra: Vercel (gru1 region) + Postgres on a VPS with pgbouncer and daily backups (pg_dump)
Who this is for
Businesses stuck with a legacy internal tool (a spreadsheet, Access, PHP or old Django) that need a modern, private, low-maintenance web app, without a full rewrite or high running costs.
Get in Touch
Interested in Internal plant and supplier catalog? Let's discuss how I can help you.
Let's talk about your project
The best way to reach me is on LinkedIn — I usually reply within a day.
Connect on LinkedIn

