Skip to content

minhnv0807/opa-autopost

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

OPA Autopost

Standalone autoposter cho Facebook Pages — upload ảnh/video + caption → lên lịch hoặc đăng ngay.

Tách ra từ Design Super Powers, không generate ảnh. User cung cấp media sẵn.


Stack

Layer Tech
Backend FastAPI (Python 3.11+), SQLAlchemy v2, APScheduler
Frontend React 18, Vite, TypeScript, Tailwind v4, shadcn/ui, Zustand, TanStack Query
DB Share với Design Super Powers (Postgres/SQLite)
Auth Single-user JWT (dev hardcode)
Storage Local filesystem (backend/uploads/)

Quick start

1. Backend

cd backend
python -m venv venv
source venv/bin/activate          # Windows: venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env               # điền giá trị
python ../scripts/migrate.py       # tạo bảng post_jobs + seed brand
uvicorn app.main:app --reload --port 8001

Backend chạy ở http://localhost:8001.

2. Frontend

cd frontend
npm install
cp .env.example .env.local
npm run dev                        # http://localhost:5201

Sharing DB với Design Super Powers

Project này dùng CÙNG DB với Design Super Powers gốc.

  • Bảng share: facebook_pages (đọc/ghi 2 chiều). Schema phải identical.
  • Bảng mới: post_jobs (chỉ autopost dùng).
  • Brand placeholder: Khi autopost connect FB Page mới, gán brand_id = "autopost-default". Migration sẽ seed brand này.
  • 2 scheduler không xung đột vì query 2 bảng khác nhau (content_items vs post_jobs).

Nếu Design Super Powers thay đổi schema facebook_pages, phải đồng bộ ở project này.


Endpoints

Method Path Mô tả
POST /api/auth/login JWT login (single user)
GET /api/facebook/pages Danh sách FB Page đã connect
POST /api/facebook/connect Connect Page bằng token thủ công
POST /api/facebook/discover-pages Lấy danh sách Page từ user token
POST /api/facebook/bulk-connect Connect nhiều Page cùng lúc
GET /api/facebook/oauth-url Lấy URL OAuth
GET /api/facebook/oauth-callback Callback OAuth
POST /api/upload Upload ảnh/video, trả về URL
GET /api/jobs List post jobs (filter status, page)
POST /api/jobs Tạo job (publish-now hoặc schedule)
GET /api/jobs/{id} Detail
PATCH /api/jobs/{id} Update job (chỉ khi queued)
POST /api/jobs/{id}/publish-now Force publish ngay
DELETE /api/jobs/{id} Hủy job

Media support

Loại Endpoint FB Graph Giới hạn
Ảnh đơn /{page-id}/photos 4MB, max 2048px
Carousel (ảnh) /{page-id}/photos (unpublished) + /feed (attached_media) Tối đa 10 ảnh
Video feed /{page-id}/videos 1GB, mp4/mov
Reel /{page-id}/video_reels (resumable upload) 3-90s, 9:16, 1GB

Project structure

opa-autopost/
├── backend/
│   ├── app/
│   │   ├── main.py
│   │   ├── config.py
│   │   ├── database.py
│   │   ├── models/        # facebook_page, post_job
│   │   ├── schemas/       # auth, facebook, post_job
│   │   ├── routers/       # auth, facebook, upload, post
│   │   ├── services/      # facebook_publisher, scheduler, storage
│   │   └── utils/         # encryption, auth (JWT)
│   ├── uploads/
│   ├── requirements.txt
│   └── .env.example
├── frontend/              # Vite React TS
└── scripts/
    └── migrate.py

About

Standalone Facebook autoposter (FastAPI + Next.js) for OPA

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors