Skip to content

yasirrajput4/Blogify

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

31 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation


Blogify

A production-ready, full-stack blogging platform built with React + Appwrite.
Write beautifully. Publish instantly. Read with intention.

Β Β  Β Β 


Blogify β€” editorial blogging platform screenshot
Click the screenshot to open the live app ↑




What is Blogify?

Blogify is a single-page application that handles the complete lifecycle of a blog post β€” from account creation and rich-text authoring, through image upload and storage, to public reading β€” with zero custom backend code. Appwrite Cloud handles all server-side concerns: authentication, database, and file storage.

The front end is built around a handcrafted editorial design system β€” Fraunces variable serif for display text, Inter for UI chrome, and a warm paper palette that makes long-form content genuinely pleasant to read.


Tech Stack

Layer Technology Why
UI React 18 + Vite Component model + instant HMR in dev, optimised bundles in prod
Styling Tailwind CSS Custom design tokens (paper, ink, terracotta) wired directly into utilities
BaaS Appwrite Cloud Auth + Database + Storage β€” no Express, no Prisma, no deployment config
State Redux Toolkit Predictable global auth state with zero boilerplate
Forms React Hook Form Uncontrolled inputs, schema validation, isSubmitting guard out of the box
Editor TinyMCE Battle-tested WYSIWYG; content_style mirrors the reading-page prose styles
Routing React Router v6 Nested layouts, protected route guards, v7 future flags enabled

Feature Highlights

Core

  • Full post CRUD β€” create, edit, publish (active), draft (inactive), delete
  • Author-only edit and delete controls rendered inline on the reading page
  • Auto-generated URL slug from title with manual override
  • Featured image upload, stored in Appwrite Storage, served via getFileView()

Auth

  • Email + password signup and login
  • Session persistence β€” Redux state rehydrated from Appwrite on every mount
  • Protected routes redirect unauthenticated users; auth pages redirect logged-in users

UX Details

  • Shimmer skeleton loaders on every async page β€” no blank flash, no layout shift
  • Live word count and estimated read time, calculated in the editor and shown on the post page
  • One-click copy-link-to-clipboard on every post
  • isSubmitting disabled state on all form buttons β€” no double-submits
  • Keyboard focus rings on every interactive element (WCAG AA)
  • prefers-reduced-motion respected via a global CSS override

Project Structure

Blogify/
β”œβ”€β”€ src/
β”‚   β”œβ”€β”€ appwrite/        # AuthService (auth) + Service (database, storage)
β”‚   β”œβ”€β”€ components/      # All UI components + AuthLayout route guard
β”‚   β”œβ”€β”€ conf/            # conf.js β€” wraps import.meta.env for type safety
β”‚   β”œβ”€β”€ pages/           # One component per route
β”‚   β”œβ”€β”€ store/           # Redux store + authSlice
β”‚   β”œβ”€β”€ App.jsx          # Root layout β€” Appwrite session check on mount
β”‚   β”œβ”€β”€ main.jsx         # Entry point β€” createBrowserRouter + Provider
β”‚   └── index.css        # Tailwind directives + editorial base + .browser-css prose
β”‚
β”œβ”€β”€ index.html           # HTML shell β€” Google Fonts (Fraunces + Inter) preloaded
β”œβ”€β”€ .env                 # Local environment secrets β€” never committed
β”œβ”€β”€ .env.example         # Safe template committed for collaborators
β”œβ”€β”€ tailwind.config.js   # Extended: editorial color palette + font families
└── README.md

Getting Started

Prerequisites: Node.js β‰₯ 18 Β· Appwrite Cloud account Β· TinyMCE API key (free)

# Clone and install
git clone https://github.com/yasirrajput4/Blogify.git
cd Blogify
npm install

# Configure secrets
cp .env.example .env
# β†’ fill in your Appwrite + TinyMCE values

# Run
npm run dev
# β†’ http://localhost:5173

Environment Variables

VITE_APPWRITE_URL="https://cloud.appwrite.io/v1"
VITE_APPWRITE_PROJECT_ID="your_project_id"
VITE_APPWRITE_DATABASE_ID="your_database_id"
VITE_APPWRITE_COLLECTION_ID="your_collection_id"
VITE_APPWRITE_BUCKET_ID="your_bucket_id"
VITE_TINYMCE_API_KEY="your_tinymce_api_key"

Variables are consumed in src/conf/conf.js and injected at build time via import.meta.env. .env is already in .gitignore.


Appwrite Configuration

Database collection attributes

Attribute Type Required
title String (255) βœ…
content String (unlimited) βœ…
featuredImage String (255) βœ…
status String (20) βœ…
userId String (255) βœ…

Collection permissions β€” Any β†’ Read Β· Users β†’ Create, Read, Update, Delete

Bucket permissions β€” Users β†’ Create, Read, Update, Delete

getFileView() is used instead of getFilePreview() β€” public bucket read is not required.

Web platforms β€” register http://localhost:5173 and your production domain under Project β†’ Platforms β†’ Web to prevent CORS errors.


Routes

Path Page Auth
/ Home β€” latest published posts Public
/login Login Redirects home if authenticated
/signup Signup Redirects home if authenticated
/all-posts All posts grid Protected
/add-post Post editor β€” create Protected
/edit-post/:slug Post editor β€” edit Protected
/post/:slug Post reading page Public

Scripts

npm run dev      # Dev server β†’ http://localhost:5173
npm run build    # Production build β†’ dist/
npm run preview  # Serve production build locally
npm run lint     # ESLint

Contributing

Issues and pull requests are welcome.

git checkout -b feat/your-feature
git commit -m "feat: describe your change"
git push origin feat/your-feature
# open a Pull Request

Follow Conventional Commits.


License

MIT β€” see LICENSE.



Built by Yasir Rajput


If this project was useful, a ⭐ goes a long way.

About

πŸ“ A full-stack blogging platform built with React + Appwrite. Features a rich text editor, image uploads, auth-protected routes, and an editorial design system inspired by Substack and Medium.

Topics

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors