尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Ever® Hust™ - The Anti-Hustle Career OS. An open agentic job-search platform that finds, evaluates and tailors your applications, then tracks every one from first search to signed offer - https://hust.so
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗An open agentic job-search platform that finds, evaluates and tailors your applications, then tracks every one from first search to signed offer.
Website · Documentation · Live App · Discord · Roadmap
[!NOTE] Hust is a standalone product. It runs fully without any Gauzy product — its only hard external dependency is the Ever Jobs API (job listings). It optionally integrates with the wider Ever Gauzy platform for the agency/company scenario. See Relationship to Ever Gauzy / Ever Jobs.
Hust is an open-source, AI-native platform that takes a job seeker through the entire journey — from the first search to a signed offer — without the spray-and-pray grind. The interface is conversational: an AI assistant on the left, a live jobs canvas on the right. But unlike a job board or a search box, Hust doesn't just find roles — it evaluates them for you, tailors your applications, and tracks every one through to the offer.
Anti-Hustle is the whole point: instead of pushing you to apply to more, Hust helps you apply to fewer, better jobs. It scores each opening against your CV and goals with an explainable fit verdict — and an honest "don't bother" when the math says so — flags postings that may not be real with a ghost-job radar, turns your profile into real, ATS-ready résumés and cover letters (generated with your sign-off, never sent behind your back), preps you with a STAR interview story bank, scripts your salary negotiation, and runs funnel analytics that learn from your outcomes to sharpen your targeting.
Two principles run through everything: quality over quantity and human-in-the-loop. Hust is built to say no on your behalf — to bad-fit roles and fake postings — and never applies for you without explicit consent. Your data stays yours, the source is auditable, and the AI's job is to advise, not to grind.
Hust works for individuals out of the box and scales to agencies and enterprises — organizations, teams, an admin console, an enterprise API, and white-label branding are built in, and an optional integration with the Ever Gauzy platform adds employee/org sync (SSO) and automated apply-at-scale. Hust's only hard dependency is the Ever Jobs sourcing API; everything else — including the Gauzy integration — is optional. Released under AGPL-3.0.
The candidate journey, end to end: find → evaluate → tailor → apply → interview → negotiate → track.
| Category | Feature | Details |
|---|---|---|
| AI Chat | Conversational job search | Split-screen with persistent sessions, deep-link support |
| Job Canvas | List / Split / Map views | Realtime updates via Supabase, Google Maps integration |
| AI Tools | 12 orchestrated tools | Search, apply, cover letters, interview prep, salary insights, company research, resume builder |
| Favorites & Compare | Side-by-side comparison | Compare jobs with "Discuss with AI" integration |
| Subscriptions | Free / Pro / Enterprise tiers | Stripe checkout, gated features, BYOK API keys |
| Alerts | Custom job alerts | Email notifications via Resend (daily/weekly) |
| Admin | Dashboard + white-label | User management, analytics, branding, org AI config |
| Enterprise | Teams & API | Organization accounts, developer API keys, usage analytics |
| PWA | Installable + offline | Service worker, push notifications, offline fallback |
| i18n | Multi-language | Language switcher in sidebar |
Deeper candidate-workflow depth — the fit-scoring engine, ghost-job radar, document rendering, pipeline, and funnel analytics — is on the active roadmap toward the full Anti-Hustle Career OS. See the PRD.
| Conversational job search | Live jobs canvas |
|---|---|
Full walkthroughs and a live demo at hust.so and docs.hust.so.
| Layer | Technology |
|---|---|
| Framework | Next.js 16.1 (App Router, Turbopack, Server Components) |
| Styling | Tailwind CSS 4.1 + ShadCN UI |
| Build | Turborepo monorepo + pnpm |
| Auth | BetterAuth v1 (LinkedIn OAuth) |
| Database | PostgreSQL via Supabase (Drizzle ORM) |
| AI | Vercel AI SDK v6, OpenRouter, Claude Sonnet 4 default |
| Observability | Langfuse (prompts + tracing), Sentry, PostHog, OpenTelemetry |
| Payments | Stripe subscriptions + webhooks |
| React Email + Resend | |
| Background Jobs | Trigger.dev v3 |
| State | Zustand (client), React Query (server state) |
| Testing | Jest (1240 unit tests) + Playwright (E2E) |
| Deployment | Vercel |
Requirements: Node.js 24+ · pnpm 10+ · a Supabase project · a LinkedIn Developer App · a Stripe account · an AI provider key (OpenRouter or Anthropic).
graph TB
subgraph "Client (Browser)"
UI[Next.js 16 App Router]
SW[Service Worker / PWA]
end
subgraph "API Routes (Serverless)"
Auth[BetterAuth + LinkedIn OAuth]
Chat[AI Chat Stream]
Jobs[Jobs CRUD + Search]
Stripe[Stripe Webhooks]
Admin[Admin APIs]
end
subgraph "AI Layer"
Orchestrator[Orchestrator Agent]
Router[Model Router<br/>BYOK → Preference → Tier → Default]
Tools[12 AI Tools]
Langfuse[Langfuse Prompts]
end
subgraph "Data"
DB[(PostgreSQL / Supabase)]
Realtime[Supabase Realtime]
Storage[Supabase Storage]
end
subgraph "External Services"
OpenRouter[OpenRouter / Anthropic]
StripeAPI[Stripe]
ResendAPI[Resend Email]
TriggerDev[Trigger.dev]
Maps[Google Maps]
end
UI --> Auth & Chat & Jobs & Stripe & Admin
Chat --> Orchestrator --> Router --> OpenRouter
Orchestrator --> Tools
Orchestrator --> Langfuse
Jobs --> DB
Realtime --> UI
TriggerDev --> DB & ResendAPI
UI --> Maps
ever-hust/
├── apps/web/ # Next.js application
│ ├── app/
│ │ ├── (admin)/ # Admin dashboard (route group)
│ │ ├── (auth)/ # Login / signup (route group)
│ │ ├── (dashboard)/ # Main app: chat, jobs, profile, settings
│ │ ├── (marketing)/ # Landing, pricing, about, contact, docs
│ │ └── api/ # 40+ API routes
│ ├── components/ # React components (canvas, chat, admin, etc.)
│ ├── hooks/ # 18 custom hooks
│ └── lib/ # Utilities, env, stores, constants
├── packages/
│ ├── ai/ # Orchestrator, model router, tools, prompts
│ ├── auth/ # BetterAuth config
│ ├── cv-parser/ # CV/resume parsing
│ ├── db/ # Drizzle ORM schemas + migrations
│ ├── email/ # React Email templates + send helpers
│ ├── jobs-api/ # Ever Jobs external API client
│ ├── stripe/ # Stripe checkout, portal, webhooks
│ ├── supabase/ # Supabase client (Realtime + Storage)
│ ├── triggers/ # Trigger.dev background tasks
│ ├── ui/ # ShadCN shared components
│ ├── utils/ # Shared utilities
│ └── config/ # Shared configs
├── tests/e2e/ # Playwright E2E tests
└── docs/ # Documentation
# Install dependencies
pnpm install --ignore-scripts
# Copy environment variables
cp .env.example .env.local
# Fill in the values in .env.local
# Push database schema
pnpm db:push
# Seed development data
pnpm db:seed
# Start development
pnpm dev
pnpm dev # Start all apps in development mode
pnpm build # Build all packages and apps
pnpm lint # Lint all packages
pnpm check-types # TypeScript type checking
pnpm test # Run unit tests (38 suites, 1240 tests)
pnpm test:e2e # Run Playwright E2E tests
pnpm db:push # Push schema changes to database
pnpm db:migrate # Run database migrations
pnpm db:seed # Seed database with test data
pnpm db:studio # Open Drizzle Studio
pnpm db:generate # Generate migration files
See .env.example for the complete list. Key groups:
| Group | Variables | Required |
|---|---|---|
| Database | DATABASE_URL | ✅ |
| Supabase | NEXT_PUBLIC_SUPABASE_URL, NEXT_PUBLIC_SUPABASE_ANON_KEY | ✅ |
| Auth | BETTER_AUTH_SECRET, BETTER_AUTH_URL, LINKEDIN_CLIENT_* | ✅ |
| AI | OPENROUTER_API_KEY or ANTHROPIC_API_KEY | ✅ (at least one) |
| Stripe | STRIPE_SECRET_KEY, STRIPE_WEBHOOK_SECRET | Production only |
RESEND_API_KEY | Production only | |
| Analytics | NEXT_PUBLIC_POSTHOG_KEY, NEXT_PUBLIC_SENTRY_DSN | Optional |
| Observability | LANGFUSE_* | Optional |
| Maps | NEXT_PUBLIC_GOOGLE_MAPS_API_KEY | Optional |
# Run all unit tests
pnpm test
# Run specific project
pnpm test -- --selectProjects ai
pnpm test -- --selectProjects stripe
# Run with coverage
pnpm test -- --coverage
# Run E2E tests
pnpm test:e2e
Current coverage: 38 test suites, 1240 tests across 9 projects. See docs/TESTING.md for details.
Hust is fully usable on its own — a self-serve, single-user AI job-search assistant. The only hard external dependency is the Ever Jobs API (job listings). Hust owns its own login (BetterAuth + LinkedIn), users, database, and apply flow.
Hust optionally plugs into the wider Ever Gauzy platform to serve the agency / company scenario, where a business sources and applies to jobs on behalf of its employees at scale. There are two optional, future integration seams — both via the Gauzy AI API, both off by default:
| Seam | Standalone default | Integrated (optional) |
|---|---|---|
| A — Auto-apply | Manual apply (opens the job's apply URL) | Application executed by Gauzy AI's AutomationTask queue + the Ever Gauzy AI Automation client |
| B — Identity & employee/org/tenant sync | Own BetterAuth + LinkedIn + own DB | SSO + employees mirrored from Ever Gauzy API (shared JWT, external*Id cross-refs) |
How the pieces fit in integrated mode: Ever Gauzy = back office (orgs, teams, employees, pipelines) · Ever Gauzy AI = engine (match, score, auto-apply, alerts) · Hust = the employee-facing UI to review and apply · Ever Gauzy AI Automation = executes the applications.
Design rule: never make Gauzy a hard dependency. Hust must always build, run, and ship without it. Full details: docs/GAUZY-INTEGRATION.md.
Full documentation lives at docs.hust.so. In-repo references:
| Document | Description |
|---|---|
| PRD | Full product requirements with implementation status |
| Gauzy / Gauzy AI Integration | Optional, standalone-first integration with the Gauzy platform |
| MVP Summary | Detailed changelog of all 12 implementation batches |
| Architecture Decisions | 15 ADRs covering key design choices |
| Testing Guide | Test setup, running, and writing guide |
Hust is meant to be served over HTTPS only. If you discover a security vulnerability, please report it responsibly to [email protected] rather than opening a public issue. See SECURITY.md for scope and our responsible-disclosure policy.
Hust is free, open-source software licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-or-later). See LICENSE for the full text.
Copyright © 2026 Ever Co. LTD.
Because Hust is designed to be operated as a network service, the AGPL's §13 applies: if you run a modified version of Hust and let users interact with it over a network, you must make the Complete Corresponding Source of your modified version available to those users. The canonical source is published at https://github.com/ever-hust/ever-hust, and the running application exposes a "Source Code" link in its footer. This obligation remains even when white-label branding is enabled.
Ever® Hust™, Ever® Gauzy™, Ever Jobs, and related names and logos are trademarks of Ever Co. LTD.
The source code is AGPL-3.0. The hosted service brand, trademarks, and content ("Hust", "Ever Jobs", logos, marketing copy) remain the property of Ever Co. LTD and are not licensed under the AGPL. You may run, modify, and redistribute the code; you may not pass off your deployment as the official Hust service. White-label branding does not transfer any trademark rights.
develop, PR to main; conventional commits; pnpm only.Copyright © 2026-present, Ever Co. LTD. All rights reserved.