Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

A premium full‐stack interior design showcase application — built with a TypeScript React frontend

Notifications You must be signed in to change notification settings

Notookk/Interiorlogy

Repository files navigation

Interiorlogy

A premium full‐stack interior design showcase application featuring a cinematic hero, animated masonry portfolio, parallax enhanced storytelling sections, and a refined contact funnel — built with a TypeScript React frontend (Vite) and an Express + Drizzle ORM backend.

✨ Highlights

  • Luxury Visual System: Glassy navigation, golden accent gradients, premium typography, subtle glow + sheen micro–interactions.
  • Animated Portfolio: Masonry layout with Ken Burns ambience, scroll reveals, hover overlays, category filtering, and reduced‐motion fallbacks.
  • Parallax Sections: Reusable ParallaxSection component provides depth without overwhelming motion.
  • Accessible Contact Funnel: Validated form with ARIA live feedback, toast notifications, external FormBackend submission, and animated info cards.
  • Theming + Dark Mode: Theme toggle with persisted preference.
  • Modern Component Stack: Radix primitives + shadcn‐style UI composition (buttons, dialogs, navigation, form inputs, etc.).
  • Typed Domain Layer: Drizzle ORM schema (shared/schema.ts) with Zod validation helpers.
  • Single Deployment Surface: API + built client served from one Node process (ideal for Render deployment).

🧱 Tech Stack

Layer Tech
UI / SPA React 18, Vite, TypeScript, Wouter routing
Styling Tailwind CSS, CSS utility animations, custom premium gradients
Motion Framer Motion (scroll + entrance + ambient)
Data Layer Drizzle ORM + Postgres (extensible)
Validation Zod + drizzle-zod
Server Express (single entry: server/index.ts)
Build Vite build for client, esbuild bundle for server
Deployment Render (single web service)

📁 Project Structure

root
├─ client/ # React + Vite frontend (root set to this in vite.config)
│ ├─ index.html
│ └─ src/
│ ├─ components/ # UI + premium sections
│ ├─ pages/
│ ├─ hooks/
│ ├─ lib/
│ └─ main.tsx # SPA bootstrap
├─ server/
│ ├─ index.ts # Express entry (serves API + static in prod)
│ ├─ routes.ts # (Extendable) API registration
│ └─ vite.ts # Dev integration + static serving
├─ shared/
│ └─ schema.ts # Drizzle schema + Zod types
├─ drizzle.config.ts # Drizzle CLI config
├─ tailwind.config.ts # Tailwind theme + tokens
├─ tsconfig.json # TS config for both client + server
├─ package.json # Scripts / deps
└─ README.md

🚀 Local Development

Prerequisites

  • Node.js 18+
  • (Optional) Postgres database if you extend user data (current routes are placeholder)

Install Dependencies

npm install

Run in Development (client + API via Vite middleware)

npm run dev

This runs server/index.ts with Vite middleware (hot reload for the React app).

Type Check

npm run check

Build (Client + Server)

npm run build

Outputs:

  • Server bundle: dist/index.js
  • Built client assets: dist/public/*

Production Start

npm start

Serves the prebuilt client + API on PORT (default 5000).

📨 Contact Form (FormBackend)

The contact form posts to FormBackend endpoint:

https://www.formbackend.com

Fields submitted: name, email, optional phone, message as multipart/form-data. You can view / manage submissions via your FormBackend dashboard.

🌫 Parallax & Motion

All scroll + reveal animations honor reduced motion preferences. To adjust parallax intensity, edit ParallaxSection props.

🛠 Extending the API

Currently server/routes.ts is a scaffold. Add routes like:

app.get('/api/health', (_req, res) => res.json({ ok: true }));

Then redeploy. The logging middleware prints compact JSON summaries for /api/* responses.

🗃 Database & Drizzle

If you provision a Postgres database:

  1. Set DATABASE_URL in your environment.
  2. Define tables in shared/schema.ts.
  3. Push schema:
npm run db:push

(If DATABASE_URL is missing, drizzle.config.ts throws early to prevent silent misconfig.)

☁️ Deploying on Render

1. Push to GitHub

Include all files except those ignored by .gitignore (already excludes node_modules, build output, etc.). Make sure you commit:

  • client/, server/, shared/, config files, package.json, package-lock.json, drizzle.config.ts, tailwind.config.ts, tsconfig.json, assets under attached_assets/.

2. Create a New Web Service

  • Build Command: npm run build
  • Start Command: npm start
  • Environment: Node 18+ (Render default is fine)
  • Add Environment Variables (optional):
    • PORT (Render supplies automatically)
    • DATABASE_URL (if using Postgres / Drizzle)
    • Any auth or feature flags you add later

3. (Optional) Postgres on Render

  • Provision a Render Postgres instance.
  • Copy its connection string into DATABASE_URL.
  • Run a one-off deploy or use a job to execute: npm run db:push.

4. CDN & Caching

Static assets are served from dist/public. Leverage long‐term caching by keeping file hashes (Vite handles this automatically).

5. Verify Deployment

After deploy completes:

curl -s https://your-service.onrender.com | head

Add a health route for better monitoring:

app.get('/api/health', (_req, res) => res.json({ status: 'ok' }));

🔒 Environment & Secrets

Do not commit secrets. Use Render Dashboard for all keys. .gitignore already excludes build artifacts.

🧪 Suggested Next Enhancements

  • Add authentication (passport local already in deps) and protected routes.
  • Introduce image optimization / CDN.
  • Implement a real portfolio CMS (Headless or simple CRUD with Drizzle).
  • Add integration tests with Vitest or Jest + supertest.
  • Add skeleton loading states where data will be dynamic.

🖼 Design Language Notes

  • Golden accent hex approximations: #fde63e, #f8d64e, #f1b84b, softened variants for hover states.
  • Use backdrop-blur + layered translucent panels for premium depth.
  • Maintain accessible contrast — avoid pure gold text on light backgrounds without outline / shadow.

📜 License

MIT © Interiorlogy


Crafted with focus on polish, performance, and accessibility.

About

A premium full‐stack interior design showcase application — built with a TypeScript React frontend

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published

AltStyle によって変換されたページ (->オリジナル) /