feat: Souq native integration + auth simplification + CE-wide enhancements
Souq Marketplace: - Native souq pages: browse+filters, create listing, detail+seller profile, orders+chat - New API: reviews (POST), sellers/[id], upload (multipart), polar-checkout webhook - Listings API enhanced: minPrice, maxPrice, sortBy, deliveryDays filters - Seller workflow: start order, mark delivered, upload files, confirm delivery - Wallet: 5 Polar.sh FLH tiers, production checkout, mock fallback, success banner - Fix: order redirect /souq/history → /souq/orders Auth System: - Unified auth page, removed OAuth provider routing (2 files deleted) - Deleted oauth.ts (319 lines) — simplified auth chain - Streamlined login/register API routes Prisma Schema (+179 lines): - New models: Listing, Purchase, Review, Group/GroupMember - Gamification: DailyStreak, XpTransaction, Achievement, UserLevel - Learning: LearnCourse/Module/Enrollment/Certificate - Notifications, Referrals, Dhikr, PremiumBenefits Deleted legacy code: - src/app/api/marketplace/* (3 files) — replaced by /api/souq/* - src/app/api/files/[listingId]/route.ts — replaced by /api/souq/upload - src/app/api/seller/[sellerId]/route.ts — replaced by /api/souq/sellers/[id] Infrastructure: - Dockerfile: standalone output, Prisma runtime migration - docker-compose.yml: Polar env vars, healthcheck fix - docker-compose.staging.yml: staging on port 4014 - .gitea/workflows/ci.yml: CI pipeline
This commit is contained in:
@@ -0,0 +1,156 @@
|
||||
#!/usr/bin/env bash
|
||||
# init-gitea-courses.sh — Create the courses repo in Gitea and push initial content
|
||||
# Run this when Gitea is available.
|
||||
# Usage: GITEA_TOKEN=xxx bash scripts/init-gitea-courses.sh
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
GITEA_URL="${GITEA_URL:-https://git.falahos.my}"
|
||||
GITEA_TOKEN="${GITEA_TOKEN:?GITEA_TOKEN is required}"
|
||||
REPO_OWNER="maifors"
|
||||
REPO_NAME="courses"
|
||||
WORKDIR="/tmp/courses-repo"
|
||||
|
||||
echo "=== Initializing Courses Repo ==="
|
||||
|
||||
# Create repo via Gitea API
|
||||
echo "Creating repo $REPO_OWNER/$REPO_NAME..."
|
||||
curl -s -X POST "$GITEA_URL/api/v1/admin/users/$REPO_OWNER/repos" \
|
||||
-H "Authorization: token $GITEA_TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d "{\"name\": \"$REPO_NAME\", \"description\": \"Falah Academy micro learning course content\", \"private\": false, \"auto_init\": false}" \
|
||||
|| echo "Repo may already exist, continuing..."
|
||||
|
||||
# Clone or create local working directory
|
||||
rm -rf "$WORKDIR"
|
||||
mkdir -p "$WORKDIR"
|
||||
cd "$WORKDIR"
|
||||
|
||||
git init
|
||||
git config user.name "Falah Academy Bot"
|
||||
git config user.email "academy@falahos.my"
|
||||
|
||||
# ─── Course Index ───
|
||||
mkdir -p courses
|
||||
cat > courses/course-index.yaml << 'INDEXEOF'
|
||||
courses:
|
||||
- slug: "atomic-habits"
|
||||
title: "Atomic Habits"
|
||||
author: "James Clear"
|
||||
- slug: "deep-work"
|
||||
title: "Deep Work"
|
||||
author: "Cal Newport"
|
||||
- slug: "7-habits"
|
||||
title: "The 7 Habits of Highly Effective People"
|
||||
author: "Stephen R. Covey"
|
||||
INDEXEOF
|
||||
|
||||
# ─── Atomic Habits Course ───
|
||||
COURSE="courses/atomic-habits"
|
||||
mkdir -p "$COURSE"
|
||||
|
||||
cat > "$COURSE/course.yaml" << 'COURSEEOF'
|
||||
slug: "atomic-habits"
|
||||
title: "Atomic Habits"
|
||||
author: "James Clear"
|
||||
description: "Master the science of habit formation in just 25 minutes."
|
||||
imageUrl: ""
|
||||
moduleCount: 5
|
||||
totalMinutes: 25
|
||||
difficulty: "beginner"
|
||||
priceFlh: 499
|
||||
priceUsd: 4.99
|
||||
subscriptionOnly: false
|
||||
published: true
|
||||
modules:
|
||||
- slug: "the-1-percent-rule"
|
||||
order: 1
|
||||
- slug: "identity-based-habits"
|
||||
order: 2
|
||||
- slug: "the-4-laws"
|
||||
order: 3
|
||||
- slug: "habit-stacking"
|
||||
order: 4
|
||||
- slug: "design-your-environment"
|
||||
order: 5
|
||||
COURSEEOF
|
||||
|
||||
# Module 1: The 1% Rule
|
||||
MODULE="$COURSE/the-1-percent-rule"
|
||||
mkdir -p "$MODULE"
|
||||
cat > "$MODULE/module.yaml" << 'YAMLEOF'
|
||||
title: "The 1% Rule"
|
||||
order: 1
|
||||
keyTakeaway: "Small habits don't just add up — they compound. Improving just 1% every day leads to being 37x better after one year."
|
||||
duration: 5
|
||||
YAMLEOF
|
||||
|
||||
cat > "$MODULE/lesson.md" << 'MDEOF'
|
||||
# The 1% Rule
|
||||
|
||||
Habits are the compound interest of self-improvement. The same way that money multiplies through compound interest, the effects of your habits multiply as you repeat them.
|
||||
|
||||
## The Math of Small Changes
|
||||
|
||||
If you get 1% better each day for one year, you'll end up 37 times better. Conversely, getting 1% worse each day for a year will decline you nearly to zero.
|
||||
|
||||
Success is the product of daily habits — not once-in-a-lifetime transformations.
|
||||
MDEOF
|
||||
|
||||
cat > "$MODULE/quiz.yaml" << 'QUIZEOF'
|
||||
questions:
|
||||
- question: "If you get 1% better every day, how much better after one year?"
|
||||
options:
|
||||
- "About 3x better"
|
||||
- "About 37x better"
|
||||
- "About 10x better"
|
||||
- "About 100x better"
|
||||
correctIndex: 1
|
||||
- question: "What is the 'Valley of Disappointment'?"
|
||||
options:
|
||||
- "A period where habits feel boring"
|
||||
- "The phase where you work but see no results"
|
||||
- "The time between starting a new habit"
|
||||
- "When you lose motivation completely"
|
||||
correctIndex: 1
|
||||
QUIZEOF
|
||||
|
||||
# Module 5: Design Your Environment
|
||||
MODULE="$COURSE/design-your-environment"
|
||||
mkdir -p "$MODULE"
|
||||
cat > "$MODULE/module.yaml" << 'YAMLEOF'
|
||||
title: "Design Your Environment"
|
||||
order: 5
|
||||
keyTakeaway: "Your surroundings shape your behavior more than willpower. Design your environment for success by reducing friction for good habits."
|
||||
duration: 5
|
||||
YAMLEOF
|
||||
|
||||
cat > "$MODULE/lesson.md" << 'MDEOF'
|
||||
# Design Your Environment
|
||||
|
||||
Willpower is overrated. The most reliable way to stick to good habits is to design your environment so that the right choice is the easy choice.
|
||||
MDEOF
|
||||
|
||||
cat > "$MODULE/quiz.yaml" << 'QUIZEOF'
|
||||
questions:
|
||||
- question: "What is a commitment device?"
|
||||
options:
|
||||
- "A promise to yourself"
|
||||
- "A present choice that locks in better future behavior"
|
||||
- "A device that tracks habits"
|
||||
- "An accountability partner"
|
||||
correctIndex: 1
|
||||
QUIZEOF
|
||||
|
||||
# ─── Commit & Push ───
|
||||
git add -A
|
||||
git commit -m "feat: initial course content - Atomic Habits"
|
||||
|
||||
git remote add origin "$GITEA_URL/$REPO_OWNER/$REPO_NAME.git"
|
||||
git branch -M main
|
||||
git push -u origin main
|
||||
|
||||
echo ""
|
||||
echo "=== Done! Repo: $GITEA_URL/$REPO_OWNER/$REPO_NAME ==="
|
||||
echo "Configure Gitea webhook to POST to https://falahos.my/api/learn/sync"
|
||||
echo " with secret matching SYNC_SECRET env var."
|
||||
Reference in New Issue
Block a user