Public site
Home, About, Products, Gallery, Testimonials, Contact — mobile-first, SEO-friendly, accessible.
Chalukya Tiles Showroom Website
Everything done to build and operate this project — categorized for owners, developers, and staff. Covers public website pages, admin panel, media uploads, analytics tables, tech stack, and how to run from VS Code.
Project folder:
C:\Users\Admin\Downloads\ChalukyaTiles_website\website_tiles1
This file:
USER_GUIDE.html (open in browser or via server at /user-guide)
Chalukya Tiles is a premium floor & interior tiles showroom website for a Coimbatore business. It is a full-stack marketing site with a private admin console for media, leads, sales, customers, and form queries.
Home, About, Products, Gallery, Testimonials, Contact — mobile-first, SEO-friendly, accessible.
Login-protected dashboard: upload tiles & videos, track sales/leads/customers, manage contact queries.
FastAPI stores form submissions and admin data in SQLite; serves HTML via Jinja2 templates.
| Item | Value |
|---|---|
| Product name | Chalukya Tiles — Floor & Interior Tiles Showroom |
| Version | 1.5.0 |
| Type | SSR website + JSON API + Admin panel |
| Memory file | PROJECT_MEMORY.md (update every session) |
| Living docs on site | /docs and this USER_GUIDE.html |
C:\Users\Admin\Downloads\ChalukyaTiles_website\website_tiles1Use these in the VS Code terminal (PowerShell). Prefer calling the venv Python directly if activation is blocked.
# 1) Go to project folder
cd C:\Users\Admin\Downloads\ChalukyaTiles_website\website_tiles1
# 2) Create virtual environment (only if .venv is missing)
C:\Users\Admin\AppData\Local\Python\pythoncore-3.14-64\python.exe -m venv .venv
# 3) Install dependencies
.\.venv\Scripts\python.exe -m pip install --upgrade pip
.\.venv\Scripts\python.exe -m pip install -r requirements.txt
# 4) Start the website (development with auto-reload)
.\.venv\Scripts\python.exe -m uvicorn app:app --reload --host 127.0.0.1 --port 8000
cd C:\Users\Admin\Downloads\ChalukyaTiles_website\website_tiles1
.\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
uvicorn app:app --reload --host 127.0.0.1 --port 8000
If PowerShell blocks activation:
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser
Uvicorn running on http://127.0.0.1:8000.\.venv\Scripts\python.exe -m uvicorn app:app --host 0.0.0.0 --port 8000 --workers 2
| What | URL |
|---|---|
| Home | http://127.0.0.1:8000/ |
| Products | http://127.0.0.1:8000/products |
| Concept Gallery | http://127.0.0.1:8000/gallery |
| Contact | http://127.0.0.1:8000/contact |
| Project docs (site) | http://127.0.0.1:8000/docs |
| This user guide | http://127.0.0.1:8000/user-guide |
| Admin login | http://127.0.0.1:8000/admin/login |
| Admin dashboard | http://127.0.0.1:8000/admin |
| API Swagger | http://127.0.0.1:8000/api/docs |
| Health check | http://127.0.0.1:8000/api/health |
adminchalukya@2026ADMIN_USERNAME, ADMIN_PASSWORD, ADMIN_SECRET before production.
| Technology | Role |
|---|---|
| HTML5 | Semantic page structure (Jinja2 templates) |
| CSS3 | Modular stylesheets, design tokens, responsive layout |
| Vanilla JavaScript (ES6+) | Navbar, filters, lightbox, forms, admin UI — no frameworks |
| Google Fonts | Inter + Poppins |
Strict exclusions: React, Vue, Angular, Bootstrap, jQuery — not used.
| Technology | Role |
|---|---|
| Python 3.11–3.14 | Runtime |
| FastAPI | HTTP routes, validation, OpenAPI docs |
| Uvicorn | ASGI server |
| Jinja2 | Server-side HTML templates |
| Pydantic v2 | Request body validation |
| python-multipart | File uploads (images / videos) |
| itsdangerous + Starlette sessions | Admin login cookies |
| Technology | Role |
|---|---|
| SQLite | database/showroom.db — contacts, enquiries, tiles, sales, leads, customers, videos, admin users |
| File system uploads | static/uploads/tiles|videos|posters/ |
| MySQL-ready design | Swap get_connection() in database/db.py later |
.venvrequirements.txtPROJECT_MEMORY.mdBrowser (public visitors)
│
├─ GET HTML pages ──► FastAPI (app.py) ──► Jinja2 templates/
├─ GET /static/* ──► StaticFiles (CSS, JS, images, uploads)
└─ POST /api/contact|enquiry ──► api/enquiry.py ──► database/db.py ──► SQLite
Browser (admin staff)
│
├─ GET /admin/login, /admin ──► admin HTML + session cookie
└─ /api/admin/* ──► api/admin.py ──► db + static/uploads/
Data flow (tile upload example)
Admin form ─► multipart POST /api/admin/tiles
─► save file to static/uploads/tiles/
─► insert row into tiles table
─► public /products and /gallery render from DB
database/db.pywebsite_tiles1/
├── USER_GUIDE.html ← this handbook (also at /user-guide)
├── PROJECT_MEMORY.md ← permanent session memory
├── README.md
├── app.py ← FastAPI entry: pages, SEO, admin HTML routes
├── requirements.txt
├── api/
│ ├── enquiry.py ← public contact / enquiry API
│ └── admin.py ← admin login, CRUD, uploads
├── database/
│ ├── db.py ← schema, helpers, seed admin + demo analytics
│ └── showroom.db ← runtime SQLite (created on first run)
├── templates/ ← public + admin HTML pages
├── static/
│ ├── css/ ← main, navbar, hero, products, gallery, admin, …
│ ├── js/ ← main, navbar, gallery, contact, admin, …
│ ├── images/ ← default SVG placeholders
│ ├── icons/ ← logo, favicon
│ ├── videos/ ← optional hero showroom.mp4
│ └── uploads/ ← admin uploads (tiles, videos, posters)
└── assets/ ← private brand sources (not public)
| Page | Path | Purpose |
|---|---|---|
| Home | / | Hero, trust stats, collection videos, featured tiles, collections, gallery preview, reviews CTA |
| About | /about | Brand story, MD, mission, showroom context |
| Products | /products | Catalogue filters + admin-uploaded tiles + built-in placeholder cards |
| Concept Gallery | /gallery | Masonry gallery, lightbox; includes uploaded tiles under Showroom |
| Testimonials | /testimonials | Customer ratings & quotes |
| Contact | /contact | Contact form + product enquiry deep-links |
| Docs | /docs | In-site technical documentation |
| User guide | /user-guide | This full handbook |
| 404 | any missing page | Branded not-found page |
URL: /admin after login at /admin/login.
Required fields when uploading a tile image:
Optional: size, finish, description. Tiles appear on Products, Concept Gallery, and Home featured (latest).
| Section | Use |
|---|---|
| Sales | Record invoices, amounts, products, status (completed / pending / cancelled) |
| Leads | Track potential customers from walk-in, WhatsApp, website, phone |
| Customers | Master list of clients (name, phone, city, address) |
| Queries | Inbox for website contact forms and product enquiries; update status |
| Type | Where stored | How added | Where shown |
|---|---|---|---|
| Tile photos | static/uploads/tiles/ | Admin → Tile Media | Products, Gallery, Home featured |
| Collection videos | static/uploads/videos/ | Admin → Collection Videos | Home mid section |
| Video posters | static/uploads/posters/ | Admin (optional) | Video poster frame |
| Placeholder SVGs | static/images/ | Built-in / manual replace | Default catalogue art |
| Logo / favicon | static/icons/ | Manual | Navbar, footer, tab icon |
There is no public visitor upload. Only authenticated admin can upload media.
Invoice number, customer, product, quantity, amount (₹), date, status. Dashboard sums totals.
Prospect pipeline: source, interest, status (new → contacted → qualified → won/lost).
Website inbox: contact messages + product enquiries from the public forms.
Saved client directory for follow-up and sales linkage.
Demo sample sales/leads/customers are seeded on first DB init so the dashboard is not empty.
| Method | Path | Purpose |
|---|---|---|
| POST | /api/contact | Contact form → SQLite |
| POST | /api/enquiry | Product enquiry → SQLite |
| GET | /api/health | Health / version |
| GET | /api/docs | Swagger UI |
| Area | Paths |
|---|---|
| Auth | POST /api/admin/login, /logout, GET /me |
| Dashboard | GET /api/admin/dashboard |
| Tiles | GET/POST /api/admin/tiles, PATCH/DELETE …/tiles/{id} |
| Videos | GET/POST /api/admin/videos, PATCH/DELETE …/videos/{id} |
| Sales | GET/POST /api/admin/sales, DELETE …/sales/{id} |
| Leads | GET/POST /api/admin/leads, PATCH/DELETE …/leads/{id} |
| Customers | GET/POST /api/admin/customers, PATCH/DELETE …/customers/{id} |
| Queries | GET /api/admin/queries + status/delete for contact & enquiry |
| Table | Purpose |
|---|---|
admin_users | Admin login credentials (hashed passwords) |
contact_messages | General contact form |
enquiries | Product / showroom enquiries |
tiles | Uploaded tile catalogue (name, model, colour, category, image path…) |
collection_videos | Homepage collection videos |
sales | Sales analytics |
leads | Lead pipeline |
customers | Customer master data |
File: database/showroom.db · Logic: database/db.py · Auto-created on server start.
static/css/)main.css — tokens, layout, forms, about/testimonialsnavbar.css, footer.css, hero.css, products.css, gallery.css, contact.css, animations.css, docs.css, admin.css, user-guide.cssstatic/js/)main.js — loader, scroll-top, animations, product filtersnavbar.js, slider.js, gallery.js, contact.js, api.js, admin.js#0b1f4a, accent blue #2f7de1X-Content-Type-Options, X-Frame-Options, Referrer-Policy, Permissions-Policyrobots.txt disallows /admin/sitemap.xml — set real SITE_URL in app.py or env| Field | Value |
|---|---|
| Brand | Chalukya Tiles |
| Phone / WhatsApp | 99407 18307 (+91 9940718307) |
| chalukyatiles@gmail.com | |
| Address | No:370, Sathy main road, Kurumbapalayam, Coimbatore, TN 641 107 |
| GSTIN | 33AAWFC0185C1ZL |
| Managing Director | C. Venkatesan, MBA |
| Logo | static/icons/logo-chalukya.png?v=174 |
ADMIN_SECRETSITE_URLdatabase/showroom.db and static/uploads/| Problem | Fix |
|---|---|
Activate.ps1 security error |
Run with .\.venv\Scripts\python.exe -m uvicorn … instead of activating |
| Port 8000 in use | Use --port 8001 or stop the other process |
| Module not found: fastapi | .\.venv\Scripts\python.exe -m pip install -r requirements.txt |
| Uploaded tile not on site | Ensure tile is Active; hard-refresh browser (Ctrl+F5) |
| Video not on home | Mark video Active = Yes; section only shows when active videos exist |
| Forgot admin password | Delete admin row or DB and restart (re-seeds default), or set env vars before first seed |
| Version | Notes |
|---|---|
| 1.0.x – 1.1.x | Full public site + project memory + /docs |
| 1.2.x – 1.3.x | Rebrand to Chalukya Tiles, logo polish |
| 1.4.x | Theme experiments; settled on blue + white, Inter/Poppins |
| 1.5.0 | Admin panel, analytics tables, tile media upload, collection videos, this user guide |
Full history lives in PROJECT_MEMORY.md.