This repository contains my Full Stack Development (FSD) course experiments/assignments.
The root index.html acts as a launcher that groups experiments by topic and links to each project (some are deployed on Render/Vercel).
This repo is organized as a monorepo-style workspace: multiple independent apps live in separate folders, and many of them have their own package.json and run independently.
Note: it does not use a monorepo tool (Nx/Turborepo/Lerna) or workspace configuration at the root. It is still structured like a monorepo for course organization.
- Static SaaS (
static-saas/) - Static Ecommerce site (Bootstrap) (
ecommerce-bootstrap/)
- JS Contact Form (
dynamic-contact-form/) - JSON Product Filter (
json-product-filter/)
- Food Delivery App (
food-delivery-app/)
- Student Server (
student-server/) - deployed on Render (linked in root index) - Movie Recommendation App (
movie-api/) - deployed on Render (linked in root index) - Random Joke Generator (
joke-app/) - deployed on Render (linked in root index)
- User Management (
user-management/) - deployed on Render (linked in root index)
- Student Feedback System (
student-feedback/) - deployed on Render (linked in root index) - Contact Form (Exp 2) with MongoDB (
mongo-contact-form/) - deployed on Render (linked in root index)
- CodeQuest (separate repository) - source code:
ryachavan/CodeQuestWeb- deployed on Vercel (linked in root index)
Open index.html (locally or via GitHub Pages if enabled). It groups experiments and provides:
- local folder links (for static projects)
- external deployment links (Render/Vercel)
Each experiment lives in its own folder. Some are pure HTML/CSS/JS (no install), while others are Node/React projects.
Note: deployed apps may require environment variables (MongoDB URLs, etc.). For local runs, create a .env file as described in relevant sections.
Folder: static-saas/
Type: Static HTML + CSS landing page
Files:
static-saas/index.htmlstatic-saas/style.css
A simple SaaS-style landing page branded as CloudKeep (cloud storage theme). It demonstrates:
- page structure using semantic sections (
header, hero section, feature cards, footer) - modern dark UI styling with CSS
- responsive-ish layout using CSS Grid for features
- Header: Logo + navigation links (Features / Pricing / Contact)
- Hero: Main headline, product pitch, CTA button
- Features grid: 4 cards (encryption, access, uploads, sharing)
- Footer: copyright
- Global reset and consistent typography
- Dark background theme
- Grid-based feature layout (
grid-template-columns: repeat(auto-fit, minmax(...))) - Hover states for nav links and CTA button
Just open:
static-saas/index.html
Folder: ecommerce-bootstrap/
Type: Static HTML using Bootstrap 5 (via CDN)
Files:
ecommerce-bootstrap/index.htmlecommerce-bootstrap/assets/(product images)
A minimal ecommerce homepage called ShopLite, demonstrating:
- using Bootstrap’s grid system and components (navbar, cards, spacing utilities)
- responsive layout for product cards
- basic storefront page structure
- Navbar: Brand + links (Home / Products / Cart)
- Hero section: headline + subtext + CTA button
- Product listing: Cards for products (images, price, Add button)
Open:
ecommerce-bootstrap/index.html
Folder: dynamic-contact-form/
Type: HTML + Vanilla JavaScript + Local Storage persistence
Files:
dynamic-contact-form/index.htmldynamic-contact-form/script.js
A browser-based contact list app that can:
- add contacts
- edit contacts
- delete contacts
- persist contacts in
localStorageso they remain after refresh
The page contains:
- inputs for name, email, phone
- an Add Contact button
- a Contact List section rendered dynamically in the page
- Data store:
contacts = JSON.parse(localStorage.getItem("contacts")) || [] - Validation:
- all fields required
- phone number must be exactly 10 digits
- email must match a basic email regex
- CRUD operations:
- Create / Update:
addContact()
UseseditIndexto decide between push vs update. - Read:
displayContacts()
Renders each contact and creates buttons bound to edit/delete. - Delete:
deleteContact(index) - Edit:
editContact(index)(loads data into input fields)
- Create / Update:
Open:
dynamic-contact-form/index.html
Folder: json-product-filter/
Type: JavaScript array operations + console output + prompt() input
Files:
json-product-filter/index.htmljson-product-filter/script.js
A small program that demonstrates:
- representing data as JSON-like objects in JS
- iterating with
forEach - filtering arrays with
filter - taking user input via
prompt - outputting results in the browser console
- A products array contains items with name and price.
- It prints all products to console.
- It asks for a minimum price using
prompt("Enter minimum price:"). - It filters and prints products with
price >= minPrice.
- Open
json-product-filter/index.html - Open DevTools Console
- Enter a number when prompted
Folder: food-delivery-app/
Type: React (Vite) + React Router + Redux Toolkit
Notable files:
food-delivery-app/package.jsonfood-delivery-app/src/main.jsxfood-delivery-app/src/App.jsxfood-delivery-app/cartSlice.js(Redux slice)food-delivery-app/src/...(components, store, styles)
A React single-page app that demonstrates:
- a multi-route UI (Food list page + Cart page)
- centralized state management using Redux Toolkit
- Vite tooling for development/build
src/main.jsxwraps the app with:<Provider store={store}>(Redux store provider)<HashRouter>(hash-based routing, useful for static hosting)
src/App.jsxdefines routes:/-><FoodList />/cart-><Cart />
<Header />is always visible (top-level layout)
cd food-delivery-app
npm install
npm run devnpm run build
npm run previewFolder: student-server/
Type: Express server + middleware + EJS views + form handling
Notable files:
student-server/server.jsstudent-server/views/(EJS templates)student-server/public/(static assets)
An Express-based server demonstrating:
- request logging with morgan
- serving static files (
public) - using EJS as a templating engine
- handling multiple routes with different HTTP methods (GET/POST/PUT)
- form submission and rendering dynamic profile data
GET /-> welcome messageGET /about-> returns name/roll/course info (HTML string)GET /contact-> emailPOST /register-> returns Student Registered SuccessfullyPUT /update-> returns Student Information UpdatedPOST /submit-> stores submitted form data and rendersprofile.ejsGET /profile-> renders profile from stored data
This uses a simple in-memory studentData object (not persistent storage).
cd student-server
npm install
node server.jsFolder: movie-api/
Type: Express REST API + static public frontend
Notable files:
movie-api/server.jsmovie-api/public/
A basic REST API that manages a list of movies (in-memory array). Demonstrates:
- building CRUD endpoints
- query filtering using query parameters
- parsing JSON request bodies
- serving static files
Each movie object contains:
idtitlegenrerating(number)recommended(string)
GET /movies- returns all movies
- supports
?rating=Nto filter by rating
POST /movies- adds a movie
- validates required fields
PATCH /movies/:id- partial update of existing movie
DELETE /movies/:id- deletes by id
cd movie-api
npm install
node server.jsFolder: joke-app/
Type: Express + EJS + Axios (server-side API call)
Notable files:
joke-app/server.jsjoke-app/views/(EJS templates)
A server-rendered app that:
- fetches a programming joke from JokeAPI on every request to
/ - renders the joke in an EJS template
GET /:- calls
https://v2.jokeapi.dev/joke/Programming?safe-mode&type=single - on success: renders the joke
- on failure: renders a fallback message
- calls
cd joke-app
npm install
node server.jsFolder: user-management/
Type: Express + MongoDB (Mongoose) + frontend UI served by Express
Notable files:
user-management/server.jsuser-management/models/User.jsuser-management/index.htmluser-management/script.jsuser-management/styles.css
A full CRUD + query demo app for managing users stored in MongoDB. Demonstrates:
- connecting to MongoDB using
mongoose.connect(process.env.MONGO_URI) - defining a User model
- handling validation and duplicate keys (email uniqueness)
- building REST endpoints for CRUD, filtering, and pagination
- a browser frontend (form + list + query bar) that calls the API
Layout is split into two panels:
- Left panel: Add/Edit User form (name, email, age, hobbies, bio)
- Right panel: List of users + search/filter controls:
- search by name
- filter by min age
- search by hobby
- reset filters
CRUD:
POST /addUser(Create)GET /users(Read all)PUT /updateUser/:id(Update)DELETE /deleteUser/:id(Delete)
Query features:
GET /search?name=...(name regex search)GET /filter?email=...&minAge=...(filter by email and min age)GET /hobby?hobby=...(find by hobby)GET /textsearch?keyword=...(MongoDB text search, requires text index in model)GET /pagination?page=N(pagination + sorting by age desc)
Create user-management/.env:
MONGO_URI=your_mongodb_connection_stringcd user-management
npm install
node server.jsFolder: student-feedback/
Type: Full-stack app: React (frontend) + Express/MongoDB (backend)
Notable structure:
student-feedback/backend/(Express + MongoDB)student-feedback/src/(React frontend)
A student feedback system demonstrating:
- authentication routes (
/api/auth) and feedback routes (/api/feedback) - CORS handling for local dev and production
- MongoDB integration using Mongoose
- serving the React production build from the backend (
dist/) - SPA fallback route to
dist/index.html
- loads environment variables with dotenv
- connects to MongoDB using
process.env.MONGO_URI - health endpoint:
GET /api/health - mounts routers:
/api/auth/api/feedback
- serves frontend build:
- static:
express.static(distPath) - fallback:
app.get('*', ...)for non-API routes
- static:
Typical backend env:
MONGO_URI=your_mongodb_connection_string
FRONTEND_URL=http://localhost:5173
NODE_ENV=developmentFolder: mongo-contact-form/
Type: Express + MongoDB (Mongoose) + static frontend (public/)
Notable files:
mongo-contact-form/server.jsmongo-contact-form/public/
An upgraded version of the contact form concept that stores contacts in MongoDB rather than in localStorage. Demonstrates:
- building a REST API for a simple entity (contacts)
- defining a Mongoose schema and model
- full CRUD operations backed by MongoDB
- serving a frontend from Express
Contact fields:
name(required)email(required)phone(required) Includes timestamps.
GET /api/contacts-> list all contactsPOST /api/contacts-> create contactPUT /api/contacts/:id-> update by idDELETE /api/contacts/:id-> delete by id
Create mongo-contact-form/.env:
MONGO_URI=your_mongodb_connection_stringcd mongo-contact-form
npm install
node server.jsCodeQuest is the mini project linked from the root index page, but its source code is maintained in a separate repository:
- Source repository:
ryachavan/CodeQuestWeb - Repository URL: https://github.com/ryachavan/CodeQuestWeb
- Live deployment: hosted on Vercel (linked in root
index.html)
- Some experiments (movie API, student server) store data in-memory; restarting the server resets state.
- Mongo-based projects require a working
MONGO_URI. - For deployed apps, env vars are configured on the hosting platform; local usage needs
.env.
Course experiments by Arya Chavan.