🔹 Week 1 (27 Aug – 2 Sept) → Backend Core
Phase 1 (Backend Core)
● Day 1–2: Project setup
○ Repo, env setup, structure, secrets, DB migrations.
● Day 3–4: Authentication system
○ User register/login, JWT, password hashing, API key system.
● Day 5–6: Database models
○ User, posts, analytics schema, scheduling tables.
● Day 7: File upload system (Multer + validation + AWS S3).
● Mail service
✅ Deliverable: Fully working backend core with file upload.
🔹 Week 2 (3 – 9 Sept) → Frontend Core
Phase 2 (Frontend Core)
● Day 1–2: Layout & navigation (home, login/register, dashboard shell).
● Day 3–4: User dashboard (post mgmt, quick stats, profile).
● Day 5–6: Upload interface (drag-drop, preview, progress, platform selector).
● Day 7: Analytics & account pages (basic dashboard, API key mgmt, profile).
✅ Deliverable: Frontend MVP connected to backend.
🔹 Week 3 (10 – 16 Sept) → Platform Integrations
Phase 3 (Instagram, YouTube, LinkedIn)
● Day 1–2: Instagram (auth, upload, captions, error handling).
● Day 3–4: YouTube (video upload, metadata, privacy).
● Day 5–6: LinkedIn (post creation, media handling).
● Day 7: Platform connection UI (OAuth, status indicators, disconnect).
✅ Deliverable: At least 3 working platform integrations.
🔹 Week 4 (17 – 23 Sept) → Advanced Features
Phase 4 (Scheduling, Bulk, Analytics, Optimization)
● Day 1–2: Scheduling system (backend cron, timezone handling, UI).
● Day 3–4: Bulk uploads + batch queue.
● Day 5–6: Content optimization (resize, convert, quality adjust).
● Day 7: Advanced analytics dashboard (charts, export).
✅ Deliverable: Full-featured MVP with scheduling + analytics.
🔹 Final Sprint (24 – 25 Sept) → Extended Integrations
& Polishing
Phase 5 (Extra Integrations + Stability)
● TikTok, Facebook, Twitter, Pinterest (basic posting only, skip extras if time).
● Error handling, retries, rate limiting.
● Final bug fixing, UI polish, testing.
✅ Deliverable: Production-ready MVP with core features + at least 4–5 platform integrations.
the features are:
1. the user can login and logout, so there will be user table.
2. each user can have multiple profiles which will be limited by their subscription. each profile
can have their own facebook, insta, youtbe, tiktok, twitter, linkedin credentials to upload different
social accounts. SPecific person, profile access.
3. the user can generate multiple api keys so that they can use the api to connect with this
platform.
4. each subscription profile (starter, pro, business) will cap profile creation and have daily upload
limits of user.
5. the user can also schedule post for each platform.
6. each linked social accounts credentials will be stored in db
Tables
main_users (
id UUID PK,
name VARCHAR(100),
email VARCHAR(150) UNIQUE,
password_hash TEXT,
subscription_id UUID FK → [Link],
created_at TIMESTAMP DEFAULT now(),
updated_at TIMESTAMP DEFAULT now(),
is_active BOOLEAN DEFAULT true
)
profiles (
id UUID PK,
sub_user_id UUID FK → sub_users.id,
platform VARCHAR(50), -- facebook, instagram, youtube, linkedin, tiktok, twitter, pinterest
account_name VARCHAR(150),
account_id VARCHAR(150), -- platform’s unique ID
access_token TEXT,
refresh_token TEXT,
expires_at TIMESTAMP,
created_at TIMESTAMP DEFAULT now(),
updated_at TIMESTAMP DEFAULT now(),
UNIQUE(sub_user_id, platform) -- ensures only ONE profile per platform per sub-user
)
facebook_platform (
)
instagram_platform (
)
youtube_platform (
)
tiktok_platform (
)
subscription_plans (
id UUID PK,
name VARCHAR(50), -- Starter, Pro, Business
max_profiles INT, -- 5, 25, 50
daily_upload_limit INT,
price_monthly NUMERIC(10,2),
price_yearly NUMERIC(10,2),
created_at TIMESTAMP DEFAULT now()
)
user_subscriptions (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT REFERENCES users(id) ON DELETE CASCADE,
subscription_id INT REFERENCES subscriptions(id),
start_date TIMESTAMP DEFAULT NOW(),
end_date TIMESTAMP,
is_active BOOLEAN DEFAULT TRUE
);
text_posts (
id UUID PK,
profile_id UUID FK → [Link],
content_text TEXT,
platform [TEXT, (facebook, instagram)],
status VARCHAR(50) DEFAULT 'pending', -- pending, scheduled, published, failed
scheduled_time TIMESTAMP,
published_time TIMESTAMP,
error_message TEXT,
created_at TIMESTAMP DEFAULT now(),
updated_at TIMESTAMP DEFAULT now()
)
image_posts (
id UUID PK,
profile_id UUID FK → [Link],
content_text TEXT,
platform TEXT,
content_url TEXT,
status VARCHAR(50) DEFAULT 'pending', -- pending, scheduled, published, failed
scheduled_time TIMESTAMP,
published_time TIMESTAMP,
error_message TEXT,
created_at TIMESTAMP DEFAULT now(),
updated_at TIMESTAMP DEFAULT now()
)
video_posts (
id UUID PK,
profile_id UUID FK → [Link],
content_text TEXT,
platform TEXT,
content_url TEXT,
status VARCHAR(50) DEFAULT 'pending', -- pending, scheduled, published, failed
scheduled_time TIMESTAMP,
published_time TIMESTAMP,
error_message TEXT,
created_at TIMESTAMP DEFAULT now(),
updated_at TIMESTAMP DEFAULT now()
)
api_keys (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT REFERENCES users(id) ON DELETE CASCADE,
key VARCHAR(64) UNIQUE NOT NULL,
usage_limit INT
description VARCHAR(255),
is_active BOOLEAN DEFAULT TRUE,
created_at TIMESTAMP DEFAULT NOW()
);
upload_logs (
id BIGSERIAL PRIMARY KEY,
user_id BIGINT REFERENCES users(id) ON DELETE CASCADE,
profile_id BIGINT REFERENCES profiles(id) ON DELETE CASCADE,
platform platform NOT NULL,
post_type TEXT,
post_id BIGINT REFERENCES posts(id),
status VARCHAR(50) DEFAULT 'success',
created_at TIMESTAMP DEFAULT NOW()
);