Creative Projects Crowdfunding Website

Project Description

Project Overview

Idea Hub is a web-based platform that allows authenticated users to submit ideas for review, track their status, and showcase approved ideas publicly. The platform includes a secure admin review workflow and enforces strict role-based permissions and data access rules.

The goal is to deliver a production-ready MVP with clean architecture, strong security, and a scalable foundation.

Core Requirements
1. Authentication & Roles

Implement user authentication with:

Signup (name, email, password)

Login / logout

Persistent sessions

Implement a role system with two roles:

user

admin

Roles must be assigned server-side only.

Users must never be able to select or modify their role from the client.

All role checks must be enforced server-side (UI checks alone are insufficient).

2. Authorization & Access Control

Users may only:

View their own ideas

Create new ideas

Edit/delete their own drafts

Users may not:

View or modify other users’ ideas

Approve or reject ideas

Change idea status directly

Admins may:

View all submitted ideas

Approve or reject ideas

Add optional admin feedback notes

All authorization must be enforced server-side with ownership checks to prevent ID-guessing attacks.

3. Idea Submission System

Each idea must include the following fields:

Title (required)

Summary (required, maximum 140 characters)

Description (required)

Category (required, fixed predefined list)

Tags (optional)

Images (optional, up to 6)

Users must be able to:

Save an idea as a draft

Submit an idea for admin review

All validation must occur server-side in addition to any client-side validation.

4. Idea Status Workflow

Ideas must follow a strict status flow:

draft

submitted

approved

rejected

Rules:

Users can transition:

draft → submitted

Admins can transition:

submitted → approved

submitted → rejected

Users cannot directly set or alter status values.

Invalid transitions must be blocked server-side.

5. User Dashboard (“My Ideas”)

Displays only the authenticated user’s ideas

Shows idea status using clear badges or labels

Allows filtering by:

All

Draft

Submitted

Approved

Rejected

Displays admin feedback notes when present

Includes proper loading and empty states

6. Admin Dashboard

(Admin access only)

Displays all submitted ideas

Provides statistics:

Total ideas

Pending (submitted)

Approved

Rejected

Allows admins to:

Review idea details

Approve or reject ideas

Add an optional admin note

All admin actions must be transactional and validated server-side

7. Public Gallery

Displays only approved ideas

Must never expose drafts, submitted, or rejected ideas

Filtering/search by:

Title

Category

Tags

Approved-only filtering must be enforced at the database query level

8. Image Upload System

Allow up to 6 images per idea

Accepted formats:

JPG / JPEG

PNG

WEBP

Enforce maximum file size per image (e.g., 5–10MB)

Images must be stored in object storage (not as database blobs)

Database should store:

Image metadata

Storage path or URL

Enforce ownership checks before allowing uploads

Sanitize filenames and generate unique paths

All upload limits must be enforced server-side.

9. Database & Data Integrity

Required entities:

Users

Ideas

Idea Images

Enforce:

Foreign key relationships

Indexes on frequently queried fields (user_id, status)

Enum or constrained values for idea status

Automatically manage timestamps (created_at, updated_at)

Prevent client-controlled queries that could bypass security

10. Security & Abuse Prevention

Implement basic rate limiting for:

Signup

Login

Idea submission

Enforce request size limits

Prevent exposure of sensitive server errors to the client

Ensure no secrets are exposed client-side

11. UX & Quality Expectations

Responsive design (mobile, tablet, desktop)

Clear loading, success, and error states

Consistent component structure and styling

Clean, maintainable, well-documented code

12. Testing & Verification

The following must be verifiable before delivery:

Non-admin users cannot access admin routes or actions

Users cannot access other users’ ideas via ID manipulation

Public gallery never shows non-approved ideas

Invalid uploads fail safely

Overlong summaries are rejected server-side

implement a Free + Pro subscription system using Stripe, enforce plan limits server-side, and add a Pro-exclusive 1:1 text chat with admins.
Must use Stripe Checkout (hosted) + Stripe Customer Portal and Stripe webhooks as the source of truth. No client-side plan gating alone; all permissions/limits must be enforced server-side.

Plans & limits

Free: 5 submissions/month, 3 images/idea

Pro (monthly subscription): higher/unlimited submissions (cap ok), 6 images/idea, access to Pro chat
(OR lifetime payment)

Payments

Implement: POST /billing/checkout, POST /billing/portal, POST /stripe/webhook (signature verified)

Webhooks: checkout.session.completed, customer.subscription.updated, customer.subscription.deleted, invoice.payment_failed

Store in DB: plan, stripe_customer_id, stripe_subscription_id, subscription_status, current_period_end

Usage enforcement

Enforce monthly submission limit server-side (recommended usage_monthly table or equivalent)

Enforce image limits server-side at upload time + ownership checks

Images must be stored in object storage (not DB blobs); store metadata + URL/path

Pro chat

MVP: text-only 1:1 thread per Pro user with admins

DB: chats (one per user), chat_messages (sender_role user/admin, message, timestamps)

Endpoints must deny access unless Pro subscription is active/trialing

Free users must not access chat even via direct API calls

Deliverables

Code changes + setup steps

Webhook testing notes

Quick QA checklist proving plan gating works Show More

Attachments

Freelancers Bidding (0)

  • This project has no proposals yet.
    Be the first to place a bid on this project!