HackFeed is a full-stack feed application built with React and Supabase, designed to showcase modern web development practices. It allows users to register, log in, and interact with a feed through posting, liking, deleting, and sharing content.
π οΈ This project is part of a technical assignment, demonstrating both frontend and backend integration with a focus on SQL-backed architecture and scalable design.
- Tech Stack & Dependencies
- Features
- Project Architecture & Technical Decisions
- Getting Started
- Project Goals
- Screenshots
- Live Demo
- Author
- React - UI library for building interactive UIs
- Vite - Next-gen frontend tooling for fast builds
- Tailwind CSS - Utility-first CSS framework
- MUI (Material UI) - Component library based on Googleβs Material Design
- Emotion - CSS-in-JS styling (used by MUI)
- Notistack - Snackbar notification library (built on top of MUI)
- Zustand - Lightweight state management
- React Query (@tanstack/react-query) - Data fetching & caching
- Supabase JS - Backend-as-a-service client for authentication, database, and storage
- React Hook Form - Performant, flexible forms in React
- Yup - Schema-based form validation
- React Router DOM - Declarative routing for React apps
- ESLint - JavaScript/TypeScript linter
- Prettier - Code formatter
- π Authentication: Register, log in, and manage user sessions via Supabase Auth
- π Feed CRUD:
- Add new posts
- Like and share posts
- Delete your own posts
- Share posts
- Report posts
- Feed updates reflect in real-time
- π§βπΌ User Profiles:
- Editable name, title, and avatar (preselect & upload)
- View own profile and others
- π Filter by User:
- Visit another user's profile to view only their posts
HackFeed follows modern, scalable frontend architecture principles to ensure maintainability and performance. Below are some key decisions made during development:
components/- Reusable UI parts (cards, background, header, etc.)pages/- Page-level views matching routes (Feed, Profile, Auth)hooks/- Custom logic for data fetching (e.g., usinguseQuery&useMutation)services/- API interaction layer (e.g., Supabase Auth and Posts)schemas/- Validation schemas usingYupstore/- Zustand for global state (e.g., auth, user info)types/- Centralized TypeScript types for consistent data shapeutils/- Helper functions for tasks like formatting or date logic
- All queries are wrapped in custom hooks using
@tanstack/react-query- Encourages separation of logic and UI
- Handles loading, caching, and refetching automatically
- Queries are triggered in components using hook invocations, keeping components clean and declarative.
- Auth is handled via Supabase Auth with JWT-based session tokens
- The authenticated user is managed through a Zustand store
- On login or refresh, the app checks and syncs the session to persist user state
- User-facing messages are centralized into constants (e.g.,
src/constants/toastMessages.ts)- This makes the UI easier to maintain, test, or localize in the future
These decisions improve:
- Readability and onboarding experience
- Code reusability and testability
- Separation of concerns
- Scalability for future features
Supabase provides a PostgreSQL backend with real-time capabilities. This project uses custom SQL queries to join user and post data, and to implement profile-level filtering.
SELECT posts.*, users.name
FROM posts
JOIN users ON posts.user_id = users.id
WHERE users.id = 'some_user_id';- Uses
JOINto fetch post + user details - Filters posts by individual user for profile views
- Real-time sync with Supabaseβs built-in listeners
git clone https://github.com/yourusername/hackfeed.git
cd HackFeednpm installCreate a .env file in the root directory and add your Supabase credentials:
VITE_SUPABASE_URL=your_supabase_url
VITE_SUPABASE_ANON_KEY=your_supabase_anon_key
NOTE: Make sure to replace your_supabase_url and your_supabase_anon_key with the actual Supabase project credentials I have provided.
npm run devTo test the report flow (flagging and reviewing posts), you can use the following administrator credentials:
With this account, you will have access to:
- Deleting all posts including those that have been reported
- Seeing detailed user information related to each post
- Accessing the admin interface to review and act on reports
The admin flow includes:
- Role-based access control
- Moderation features (report handling)
- Visibility into all user-generated content
- Build a real-world, data-driven React application
- Deepen understanding of SQL JOINs and PostgreSQL via Supabase
- Demonstrate clean architecture and maintainable code
- Prepare for technical discussions and interviews
| Table | Fields |
|---|---|
posts |
id, content, created_at, user_id |
profiles |
id, name, email, title, avatar_url, |
likes |
post_id, user_id, created_at |
shares |
post_id, shared_by_id, shared_at |
Views: feed_posts_shared (includes shared_by_id, shared_by_name, shared_by_avatar_url, shared_by_title, shared_at, shared, like_count, share_content, liked_by_current_user)
| Feed View | User Profile |
|---|---|
![]() |
![]() |
You can explore the app here: EXPLORE APP
Created by Slavi Dimitrov
This project is a technical showcase of full-stack development skills.

