A visually stunning, modular blog web app built with React and Vite.
Create, update, and explore blog posts with a beautiful, responsive UI, rich text editing, and seamless navigation.
Features include authentication, dynamic banners, paginated blog loading, tag-based filtering, and mobile-responsive design.
- About the Project
- Tech Stack
- Getting Started
- Folder Structure
- Color Palette
- Image Credits
- API Credits
- What I Learned
- More Info
WriteOn is a personal project designed to provide a modern, user-friendly blogging experience. Users can:
- Create, update, and delete blog posts with rich text formatting
- Browse recent posts in a dynamic grid layout
- Search posts by title, content, or tags
- Filter and discover related blogs by tags
- Enjoy a responsive UI with glassmorphism effects and floating header/footer
- Authenticate with Firebase (login/signup)
- Experience seamless navigation across desktop and mobile
Here are some screenshots of WriteOn in action:

Homepage: Recent blog posts and dynamic banner

Create page: Rich text editor for new posts

Blog detail: Three-section layout with author, content, and tags
- React (with Hooks)
- Vite (fast development/build)
- Tailwind CSS (utility-first styling)
- Firebase Firestore (database)
- Firebase Auth (authentication)
- Jodit Editor (rich text editing)
- Material Symbols (icons)
- Clone the repo:
git clone https://github.com/ayush-sleeping/WriteOn.git cd WriteOn
- Install dependencies:
npm install
- Set up Firebase:
- Create a Firebase project at Firebase Console
- Enable Firestore and Authentication
- Copy your Firebase config and paste it into
src/firebase-config.jsx
- Run the app:
npm run dev
- Open in browser:
- Visit http://localhost:5173
WriteOn/
├── public/
│ └── vite.svg
├── src/
│ ├── assets/ # Images, logos, icons
│ ├── components/
│ │ ├── Header/
│ │ ├── Footer/
│ │ └── ... # Other UI components
│ ├── pages/ # Home, Blog, Create, Update, etc.
│ ├── App.jsx
│ ├── main.jsx
│ ├── firebase-config.jsx
│ ├── index.css
│ └── App.css
├── package.json
├── vite.config.js
└── README.md
- Components are modular and grouped by feature
- Pages handle routing and CRUD operations
- Firebase config is kept in
src/firebase-config.jsx
(never commit secrets)
- Primary: #6C63FF (indigo)
- Accent: #FF6584 (rose pink)
- Background: #18181B, #23272F (dark glass)
- Text: #fff (white)
- Other: #2D2D34, #3A3A40 (glassmorphism overlays)
All images and logos used in this project are either custom-made or downloaded from Pinterest. Thanks to the creators for their work.
Thanks to Firebase for providing free authentication and database services for personal projects.
Important:
- For this personal/demo project, the Firebase config is included in
src/firebase-config.jsx
and basic Firestore rules are used for convenience and easy setup. - For real production apps, never expose sensitive keys or secrets in your frontend code or public repo. Always use environment variables and keep secrets private.
- In production, you must set strict Firestore security rules to prevent unauthorized access and writes. Example:
service cloud.firestore { match /databases/{database}/documents { match /posts/{postId} { allow read: if true; allow write: if request.auth != null; } } }
- Always review and update your Firebase rules in the Firebase Console before deploying a real app.
- For public deployments, restrict your Firebase rules and never allow open write access to your database.
- Building a modular, scalable React project structure
- Integrating Firebase Firestore and Auth for real-world CRUD and authentication
- Advanced React Router usage for dynamic blog pages
- Responsive UI/UX with Tailwind CSS and custom CSS
- Rich text editing integration with Jodit Editor
- Managing authentication state and protected routes
- Handling mobile-first design and glassmorphism effects
- This is a personal project; contributions are not accepted.
- Explore, learn, and enjoy blogging!