SlideOS is an AI-assisted presentation builder where users can:
- generate slide outlines from prompts,
- edit outlines,
- open a full visual slide editor,
- export PPTX,
- save presentations to MongoDB,
- reopen and continue editing later.
This repository is a full-stack monorepo:
frontend/-> React + Vite clientbackend/-> Node.js + Express + MongoDB API
- JWT authentication (
register,login) - Protected slide generation endpoint
- AI generation with Groq fallback logic
- Saved presentations per user
- Open previously saved presentations
- Update saved presentations after editing
- PPTX export from editor view
- Light-theme only UI
- React 18
- Vite
- React Router
- Tailwind CSS (plus custom UI components)
react-rnd(drag/resize slide elements)pptxgenjs(PowerPoint export)
- Node.js (ES Modules)
- Express
- MongoDB + Mongoose
- JWT (
jsonwebtoken) - Password hashing (
bcryptjs) - CORS + body parsing
SlideOS/
├─ backend/
│ ├─ app.js
│ ├─ server.js
│ ├─ models/
│ │ ├─ users.js
│ │ └─ presentation.js
│ └─ src/
│ ├─ controllers/
│ │ ├─ login.controller.js
│ │ ├─ generate.controller.js
│ │ └─ presentation.controller.js
│ ├─ middleware/
│ │ └─ middleware.js
│ ├─ routes/
│ │ ├─ auth.route.js
│ │ ├─ generate.route.js
│ │ └─ presentation.route.js
│ ├─ services/groq.service.js
│ ├─ utils/fakeaigeneration.js
│ └─ validaters/generate.validator.js
│
├─ frontend/
│ ├─ src/
│ │ ├─ App.jsx
│ │ ├─ main.jsx
│ │ ├─ components/
│ │ │ ├─ AuthForm.jsx
│ │ │ ├─ Header.jsx
│ │ │ ├─ Footer.jsx
│ │ │ ├─ PresentationGenerator.jsx
│ │ │ └─ ui/*
│ │ ├─ pages/
│ │ │ ├─ MyPresentations.jsx
│ │ │ ├─ PresentationPreview.jsx
│ │ │ └─ PresentationView.jsx
│ │ ├─ providers/ThemeProvider.jsx
│ │ ├─ services/presentationService.js
│ │ └─ styles/*
│ └─ package.json
└─ README.md
- Node.js 18+
- npm
- MongoDB running locally (default used:
mongodb://127.0.0.1:27017/slideOS)
Create backend/.env:
PORT=5000
MONGO_URI=mongodb://127.0.0.1:27017/slideOS
JWT_SECRET=your_long_random_secret
JWT_EXPIRES_IN=7d
GROQ_API_KEY=your_groq_api_keyCreate frontend/.env:
VITE_API_BASE_URL=http://localhost:5000/apicd backend
npm install
npm run startBackend should run on http://localhost:5000.
cd frontend
npm install
npm run devFrontend should run on http://localhost:5173.
Base URL: http://localhost:5000/api
POST /auth/registerPOST /auth/login
POST /generate(protected)
POST /presentations(protected) -> save newGET /presentations(protected) -> list mineGET /presentations/:id(protected) -> fetch onePUT /presentations/:id(protected) -> update one
Use header for protected endpoints:
Authorization: Bearer <token>- User registers/logs in.
- Frontend stores JWT in
localStorage. - User generates slides from prompt.
- Generated presentation is saved to DB.
- User edits outline in Preview page.
- User opens Presentation View for advanced editing.
- User clicks Save Changes in Presentation View to persist updates.
- User can reopen from My Presentations later.
- Backend request body limit is configured to
10mbinbackend/app.js. - If large image-heavy payloads exceed this, increase limit carefully.
- Saved records include editable content JSON; very large content can impact DB size.
- Clear old token from browser storage.
- Login again.
- Ensure
JWT_SECRETis stable and backend restarted.
- Increase JSON body limit in
backend/app.js. - Reduce embedded image size/base64 payload when possible.
- Ensure backend is running on port
5000. - Ensure
VITE_API_BASE_URL=http://localhost:5000/api. - Restart frontend after env changes.
npm run start-> run servernpm run dev-> run with Node watch mode
npm run dev-> start Vite dev servernpm run build-> production build
Implemented:
- Auth, protected generation, save/list/open/update presentations, PPT export.
Possible next improvements:
- delete/rename presentations,
- autosave in editor,
- pagination/search in My Presentations,
- refresh-token flow,
- tests (unit/integration/e2e).
made for learning purose