Next.js 16, React 19, Monaco editor, Anthropic SDK, multi-provider AI, Wandbox Python execution, iframe HTML preview, SQLite auth + session persistence. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
70 lines
3.0 KiB
Bash
70 lines
3.0 KiB
Bash
#!/usr/bin/env bash
|
|
set -e
|
|
|
|
cd "$(dirname "$0")"
|
|
|
|
# ─── Colours ──────────────────────────────────────────────────────────────────
|
|
BOLD='\033[1m'
|
|
DIM='\033[2m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[0;33m'
|
|
RED='\033[0;31m'
|
|
CYAN='\033[0;36m'
|
|
RESET='\033[0m'
|
|
|
|
echo ""
|
|
echo -e "${BOLD} Professor — AI Coding Tutor${RESET}"
|
|
echo -e "${DIM} ─────────────────────────────${RESET}"
|
|
echo ""
|
|
|
|
# ─── Check Node ───────────────────────────────────────────────────────────────
|
|
if ! command -v node &>/dev/null; then
|
|
echo -e "${RED} ✗ Node.js is not installed. Please install Node.js 18+ and try again.${RESET}"
|
|
exit 1
|
|
fi
|
|
|
|
NODE_VERSION=$(node -e "process.stdout.write(process.version.slice(1).split('.')[0])")
|
|
if [ "$NODE_VERSION" -lt 18 ]; then
|
|
echo -e "${RED} ✗ Node.js 18+ required (found v${NODE_VERSION}).${RESET}"
|
|
exit 1
|
|
fi
|
|
|
|
# ─── Check npm deps ───────────────────────────────────────────────────────────
|
|
if [ ! -d "node_modules" ]; then
|
|
echo -e "${YELLOW} ⚙ node_modules not found — installing dependencies…${RESET}"
|
|
npm install --silent
|
|
echo -e "${GREEN} ✓ Dependencies installed${RESET}"
|
|
else
|
|
echo -e "${GREEN} ✓ Dependencies ready${RESET}"
|
|
fi
|
|
|
|
# ─── Check .env.local ─────────────────────────────────────────────────────────
|
|
if [ ! -f ".env.local" ]; then
|
|
echo -e "${YELLOW} ⚠ .env.local not found — creating it now${RESET}"
|
|
echo "ANTHROPIC_API_KEY=your_api_key_here" > .env.local
|
|
fi
|
|
|
|
ANTHROPIC_KEY=$(grep -E "^ANTHROPIC_API_KEY=" .env.local | cut -d= -f2- | tr -d '[:space:]')
|
|
|
|
if [ -z "$ANTHROPIC_KEY" ] || [ "$ANTHROPIC_KEY" = "your_api_key_here" ]; then
|
|
echo ""
|
|
echo -e "${YELLOW} ⚠ No Anthropic API key found in .env.local${RESET}"
|
|
echo -e "${DIM} You can still use OpenRouter, LM Studio, or Ollama via the${RESET}"
|
|
echo -e "${DIM} provider settings in the app. To use Claude, add your key:${RESET}"
|
|
echo ""
|
|
echo -e "${DIM} ANTHROPIC_API_KEY=sk-ant-… → .env.local${RESET}"
|
|
echo ""
|
|
else
|
|
echo -e "${GREEN} ✓ Anthropic API key found${RESET}"
|
|
fi
|
|
|
|
# ─── Launch ───────────────────────────────────────────────────────────────────
|
|
PORT=${PORT:-3000}
|
|
|
|
echo ""
|
|
echo -e "${CYAN} ➜ Starting dev server on http://localhost:${PORT}${RESET}"
|
|
echo -e "${DIM} Press Ctrl+C to stop${RESET}"
|
|
echo ""
|
|
|
|
exec npm run dev -- --port "$PORT"
|