Flowers Shop — website + Telegram bot for a flower shop
Flowers #Shop is a comprehensive #platform for a flower shop: a #showcase website for customers and a #Telegram bot with an admin #dashboard and a #customer #account. All features were developed from scratch without using a #CMS or pre-made templates.
The site features a #premium #design in a burgundy, gold, and ivory color palette, with #mobile responsiveness, scroll-reveal animations, and a scroll progress bar. The #product #catalog supports filtering by category and pagination with 9 products per page. Each product card displays a star rating, a discount badge, or the “Bouquet of the Day” label; clicking on it opens a popup with a gallery of up to 3 photos and full product details.
A separate “Bouquets of the Day” section showcases selected products. Customer reviews are displayed with an avatar, rating, and product name. The contact section features an interactive OpenStreetMap with a route button, a highlighted schedule for the current day, and links to social media. The order pop-up contains the store’s contact information and a “Call Me” form with a Ukrainian number mask and IP-based spam protection.
The Telegram bot for the administrator allows full control of the store: add and edit products with up to three photos, set percentage and fixed discounts, manage categories and daily specials. Built-in review moderation system with instant notifications. Newsletters support formatted text, photos, and videos, feature a preview before sending, and provide delivery statistics. The customer CRM allows you to assign purchases to customers by phone number even before they register in the bot, with automatic notifications sent to the customer via Telegram.
#The customer dashboard in the bot is accessed via phone number and immediately displays the entire purchase history—even if the admin added them earlier. Customers can leave reviews with ratings and text, anonymously or by name.
Tech stack: #Node.js 22, #Express.js, #SQLite with built-in node:sqlite, #Telegraf.js, #Leaflet.js, #Vanilla #HTML/CSS/JS. Two processes (server and bot) run in parallel via WAL mode without blocking. Deployed on #VPS via #PM2 and #Nginx.
Translated with DeepL.com (free version)
The site features a #premium #design in a burgundy, gold, and ivory color palette, with #mobile responsiveness, scroll-reveal animations, and a scroll progress bar. The #product #catalog supports filtering by category and pagination with 9 products per page. Each product card displays a star rating, a discount badge, or the “Bouquet of the Day” label; clicking on it opens a popup with a gallery of up to 3 photos and full product details.
A separate “Bouquets of the Day” section showcases selected products. Customer reviews are displayed with an avatar, rating, and product name. The contact section features an interactive OpenStreetMap with a route button, a highlighted schedule for the current day, and links to social media. The order pop-up contains the store’s contact information and a “Call Me” form with a Ukrainian number mask and IP-based spam protection.
The Telegram bot for the administrator allows full control of the store: add and edit products with up to three photos, set percentage and fixed discounts, manage categories and daily specials. Built-in review moderation system with instant notifications. Newsletters support formatted text, photos, and videos, feature a preview before sending, and provide delivery statistics. The customer CRM allows you to assign purchases to customers by phone number even before they register in the bot, with automatic notifications sent to the customer via Telegram.
#The customer dashboard in the bot is accessed via phone number and immediately displays the entire purchase history—even if the admin added them earlier. Customers can leave reviews with ratings and text, anonymously or by name.
Tech stack: #Node.js 22, #Express.js, #SQLite with built-in node:sqlite, #Telegraf.js, #Leaflet.js, #Vanilla #HTML/CSS/JS. Two processes (server and bot) run in parallel via WAL mode without blocking. Deployed on #VPS via #PM2 and #Nginx.
Translated with DeepL.com (free version)