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
12 changes: 12 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
# Copy this file to .env and fill in the values. Never commit .env.

# PostgreSQL connection string
DATABASE_URL="postgresql://USER:PASSWORD@localhost:5432/interviewos"

# Login sessions (run `npx auth secret` to generate one)
AUTH_SECRET=""

# LiveKit (video and audio)
LIVEKIT_API_KEY=""
LIVEKIT_API_SECRET=""
NEXT_PUBLIC_LIVEKIT_URL=""
33 changes: 33 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
name: CI

on:
pull_request:
push:
branches: [main]

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

jobs:
lint-and-build:
name: Lint, typecheck, and build
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

- uses: actions/setup-node@v7
with:
node-version: 20
cache: npm

- run: npm ci

- name: Lint
run: npm run lint

- name: Typecheck
run: npm run typecheck

- name: Build
run: npm run build
19 changes: 19 additions & 0 deletions .github/workflows/secret-scan.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
name: Secret Scan

on:
pull_request:
push:
branches: [main]

jobs:
trufflehog:
name: Scan for leaked secrets
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
with:
fetch-depth: 0

- uses: trufflesecurity/trufflehog@v3.99.2
with:
extra_args: --results=verified,unknown
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -43,3 +43,5 @@ next-env.d.ts
.vscode/*
!.vscode/extensions.json
.idea/

/src/generated/prisma
11 changes: 10 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
We're excited you want to help build InterviewOS! This guide covers how to install the project, run it locally, and submit your work.

> [!NOTE]
> The project is still being set up. Some commands below will start working once the starter code is merged.
> The project is still being set up. The database schema has no models yet, so `npx prisma migrate dev` has nothing to apply until the first schema PR is merged.

## Installation

Expand Down Expand Up @@ -88,6 +88,12 @@ Open [http://localhost:3000](http://localhost:3000) in your browser.
npm run lint
```

### Check types

```bash
npm run typecheck
```

### Build the app

Always run a build before you open a PR. This catches errors that `npm run dev` can miss.
Expand Down Expand Up @@ -137,7 +143,10 @@ Use [Conventional Commits](https://www.conventionalcommits.org/) to keep history

- [ ] Your branch is up to date with `main`
- [ ] `npm run lint` passes
- [ ] `npm run typecheck` passes
- [ ] `npm run build` passes

GitHub Actions runs lint, typecheck, build, and a secret scan on every PR. Make sure all checks pass before asking for a merge.
- [ ] You tested your change by hand
- [ ] You added tests where it makes sense
- [ ] You added a screenshot or screen recording for UI changes
Expand Down
25 changes: 25 additions & 0 deletions components.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "base-nova",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "",
"css": "src/app/globals.css",
"baseColor": "neutral",
"cssVariables": true,
"prefix": ""
},
"iconLibrary": "lucide",
"rtl": false,
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
},
"menuColor": "default",
"menuAccent": "subtle",
"registries": {}
}
18 changes: 18 additions & 0 deletions eslint.config.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
import { defineConfig, globalIgnores } from "eslint/config";
import nextVitals from "eslint-config-next/core-web-vitals";
import nextTs from "eslint-config-next/typescript";

const eslintConfig = defineConfig([
...nextVitals,
...nextTs,
// Override default ignores of eslint-config-next.
globalIgnores([
// Default ignores of eslint-config-next:
".next/**",
"out/**",
"build/**",
"next-env.d.ts",
]),
]);

export default eslintConfig;
17 changes: 17 additions & 0 deletions next.config.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
import type { NextConfig } from "next";

const nextConfig: NextConfig = {
/* config options here */
cacheComponents: true,
partialPrefetching: true,
turbopack: {
rules: {
"*.css": {
loaders: ["@tailwindcss/turbopack"],
as: "*.css",
},
},
},
};

export default nextConfig;
Loading
Loading