Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 2 additions & 5 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,8 @@ FEISHU_OAUTH_REDIRECT_URI=http://localhost:3000/api/auth/feishu
# - IM v1 message/create with bot ability enabled
FEISHU_EVENT_VERIFICATION_TOKEN=
FEISHU_EVENT_ENCRYPT_KEY=
# Local only. Production must configure INNGEST_SIGNING_KEY instead.
INNGEST_DEV=1
# Optional chat_id for privacy-safe interview schedule group notifications.
FEISHU_INTERVIEW_CHAT_ID=
NONCESTR=
Expand Down Expand Up @@ -50,11 +52,6 @@ EMAIL_RETRY_SCAN_LIMIT=50
EMAIL_SEND_RATE_LIMIT_PER_MINUTE=120
EMAIL_ATTEMPT_RETENTION_DAYS=180
EMAIL_WEBHOOK_SECRET=
OPENAI_API_KEY=
# Optional. Defaults to https://api.openai.com/v1.
OPENAI_BASE_URL=
# Optional. Defaults to gpt-5-mini.
OPENAI_MODEL=
SENTRY_DSN=
NEXT_PUBLIC_SENTRY_DSN=
# Local builds keep the Sentry build plugin off to avoid optional build-manager warnings.
Expand Down
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ Identity and profile data come from **SAST Link**. People owns workflows, gradin

## Stack

Next.js 16 App Router, React 19, TypeScript strict, Tailwind CSS v4, shadcn/ui, lucide-react, Jest 30, Playwright, Drizzle ORM with PostgreSQL, Inngest, React Email, Feishu/Lark SDK, Sentry, optional OpenAI-compatible server-side AI drafts.
Next.js 16 App Router, React 19, TypeScript strict, Tailwind CSS v4, shadcn/ui, lucide-react, Jest 30, Playwright, Drizzle ORM with PostgreSQL, Inngest, React Email, Feishu/Lark SDK, and Sentry.

## Commands

Expand Down
6 changes: 1 addition & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,6 @@ SAST People owns the recruitment and review process. User identity, profile data
- Result email center with templates, batches, retries, rate limiting, provider webhooks, and attempt history.
- Link role synchronization from accepted workflow results.
- Link user lookup, read-only profile viewing, role editing, and account banning for workflow administration.
- Optional server-side AI drafts for candidate summaries and interview evaluations (`OPENAI_*`).
- Local PostgreSQL development database with seed data for repeatable demos.
- Jest unit/integration tests and Playwright end-to-end coverage for critical admin and student paths.

Expand Down Expand Up @@ -72,7 +71,7 @@ This enum replaced the older `user_flow.status` values (`pending` / `accepted` /
| Data fetching | Server Components, Server Actions, SWR |
| Background jobs | Inngest |
| Email | react-email, nodemailer, Feishu SMTP |
| Integrations | Feishu / Lark Open API, SAST Link, optional OpenAI-compatible API |
| Integrations | Feishu / Lark Open API, SAST Link |
| Observability | Sentry |
| Testing | Jest, Testing Library, Playwright |

Expand Down Expand Up @@ -199,12 +198,9 @@ Keep secrets in `.env.local`. Do not commit real `.env*` files.
| `FEISHU_INTERVIEW_CHAT_ID` | Optional group chat for privacy-safe interview schedule cards |
| `APP_ID` / `APP_SECRET` / `NONCESTR` | Feishu app credentials used by interview scheduling |
| `EMAIL_*` | SMTP, retries, rate limits, webhook secret, non-production recipient guard |
| `OPENAI_API_KEY` / `OPENAI_BASE_URL` / `OPENAI_MODEL` | Server-side AI drafts only |
| `SENTRY_DSN` / `NEXT_PUBLIC_SENTRY_DSN` | Runtime error reporting |
| `SENTRY_BUILD_PLUGIN` | Enable Sentry build plugin only when intentionally needed |

AI-assisted candidate summaries and interview evaluation drafts are server-side only. Do not expose OpenAI credentials with `NEXT_PUBLIC_*`.

### Production runtime env

For production Docker deployment, runtime secrets live on the server at:
Expand Down
278 changes: 0 additions & 278 deletions action/ai/candidate.ts

This file was deleted.

2 changes: 0 additions & 2 deletions action/email/test-send.ts
Original file line number Diff line number Diff line change
Expand Up @@ -136,8 +136,6 @@ async function createTestRenderRequest({
startsAt,
endsAt: new Date(startsAt.getTime() + 30 * 60 * 1000),
location: "仙林校区大学生活动中心 101",
meetingLink: "https://vc.feishu.cn/j/123456789",
scheduleLink: "https://applink.feishu.cn/client/calendar/event/detail?calendarId=primary&eventId=demo",
note: "请提前准备作品介绍。",
},
};
Expand Down
Loading