Postify is a Vite + React + Tailwind web app for cycle-based social posting. It collects work highlights from Codex webhook imports, optional GitHub activity, and manual entries; ranks them; generates LinkedIn draft variants; lets the user edit and approve; then creates server-side publish jobs for LinkedIn.
- Tenity-inspired public landing page, Vite login page, and authenticated app shell.
- Dashboard, connections, cycle creation, highlight review, draft editor, publish confirmation, history, and settings routes.
- shadcn/ui source components plus 21st.dev registry components for the sign-in surface and folder visual.
- Firebase-ready auth context with local demo fallback when
VITE_FIREBASE_*values are missing. - Firebase Hosting, Firestore rules, Storage rules, and Functions scaffolding.
- Cloud Functions for cycle creation, suggestions, draft generation, OAuth start/callbacks, Codex webhook intake, publish jobs, retries, disconnects, scheduled cycle checks, token refresh placeholder, GitHub sync placeholder, and OAuth cleanup.
- Basic security defaults: user-owned Firestore rules, server-only token storage paths, OAuth state docs, HMAC webhook verification, AES-GCM token encryption helper, audit logs, and final posting consent.
npm install
npm run devThe app runs without Firebase credentials in demo mode. Fill .env from .env.example when the Firebase web app is ready.
npm run build
npm run test
npm run --prefix functions build- Create or select the Google Cloud/Firebase project named
postify-498112. - Enable Firebase Authentication, Firestore, Storage, Hosting, Cloud Functions, Cloud Scheduler, Secret Manager, and Vertex AI.
- Install the Firebase Trigger Email extension and configure SMTP credentials.
- Add Firebase web app values to
.env. KeepVITE_PUBLIC_APP_URL=https://postify.adityakosuru.onlineandVITE_FIREBASE_AUTH_DOMAIN=postify.adityakosuru.onlinefor production. - Add Functions secrets/env values from
functions/.env.example. - Deploy with:
npm run build
firebase deploy- LinkedIn: create a LinkedIn Developer app and request the permissions needed for profile posting, including
w_member_social. - Instagram/Meta publishing is disabled for the public beta.
- GitHub: create an OAuth app for repo activity imports.
- Codex: configure a Codex Automation to generate cycle summaries and POST signed JSON to
codexIntakeWebhook.
Real social publishing depends on valid platform credentials and account review. Without those, the frontend remains usable in demo mode and Functions return reauth/failure statuses rather than exposing secrets to the browser.
Use https://postify.adityakosuru.online as the primary public app URL.
Provider callbacks routed through Firebase Hosting:
Google/Firebase Auth: https://postify.adityakosuru.online/__/auth/handler
LinkedIn OAuth: https://postify.adityakosuru.online/oauth/linkedin/callback
GitHub OAuth: https://postify.adityakosuru.online/oauth/github/callback
Codex webhook: https://postify.adityakosuru.online/codex/intake?bridgeId=...
The Hosting rewrites in firebase.json forward the OAuth and Codex paths to Cloud Functions, so users and provider dashboards can use the custom domain while backend code still runs securely in Functions.