{"id":48522752,"url":"https://github.com/devaneyj3/job_search_tracker","last_synced_at":"2026-04-07T21:32:53.212Z","repository":{"id":313080276,"uuid":"1049848088","full_name":"devaneyj3/job_search_tracker","owner":"devaneyj3","description":"Next.js 16, React 19, Prisma + PostgreSQL, NextAuth, Tailwind CSS, Radix UI, React Hook Form + Zod, Motion animations, email \u0026 calendar automation, and PDF generation","archived":false,"fork":false,"pushed_at":"2026-02-23T17:34:38.000Z","size":1047,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-02-24T00:53:08.738Z","etag":null,"topics":["axios","lucide-react","moment-js","next-auth","nextjs","nodemailer","prisma","react","react-pdf-renderer","scss","shadcn-ui","supabase","tailwindcss","vitest"],"latest_commit_sha":null,"homepage":"https://job-search-tracker-one.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/devaneyj3.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-09-03T15:25:36.000Z","updated_at":"2026-02-23T17:34:42.000Z","dependencies_parsed_at":"2025-09-19T02:31:06.149Z","dependency_job_id":"019afba1-1784-45da-8050-70e258b60623","html_url":"https://github.com/devaneyj3/job_search_tracker","commit_stats":null,"previous_names":["devaneyj3/job_search_tracker"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/devaneyj3/job_search_tracker","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devaneyj3%2Fjob_search_tracker","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devaneyj3%2Fjob_search_tracker/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devaneyj3%2Fjob_search_tracker/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devaneyj3%2Fjob_search_tracker/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/devaneyj3","download_url":"https://codeload.github.com/devaneyj3/job_search_tracker/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/devaneyj3%2Fjob_search_tracker/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31530642,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-07T16:28:08.000Z","status":"ssl_error","status_checked_at":"2026-04-07T16:28:06.951Z","response_time":105,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["axios","lucide-react","moment-js","next-auth","nextjs","nodemailer","prisma","react","react-pdf-renderer","scss","shadcn-ui","supabase","tailwindcss","vitest"],"created_at":"2026-04-07T21:32:53.128Z","updated_at":"2026-04-07T21:32:53.197Z","avatar_url":"https://github.com/devaneyj3.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Job Tracker\n\nTrack target companies, submitted applications, and professional connections during a job search.  \nThe app provides dashboards for company pipeline management, application tracking, and outreach tracking.\n\n## Technologies Used\n\n- Framework: `Next.js 16` (App Router) + `React 19`\n- Authentication: `next-auth` with Google OAuth\n- Database/ORM: `PostgreSQL` + `Prisma 7` (`@prisma/adapter-pg`)\n- Styling/UI: `SCSS modules`, `Tailwind CSS v4`, Radix/shadcn-style UI components\n- Forms/Validation: `react-hook-form` + `zod`\n- Notifications: `sonner`\n- Email/Docs tooling: `nodemailer`, `@react-pdf/renderer`, `ical-generator`\n- Testing: `Vitest` + Testing Library\n- Linting: `ESLint` + `eslint-config-next`\n\n## File Structure\n\n```text\njob-tracker/\n  app/\n    (dashboard)/\n      dashboard/page.jsx\n      companies/page.jsx\n      applications/page.jsx\n      connections/page.jsx\n      layout.jsx\n    api/\n      auth/[...nextauth]/route.js\n      company/route.jsx\n      application/route.jsx\n      connection/route.jsx\n    layout.jsx\n    page.jsx\n  features/\n    companies/\n      components/\n      context/companyContext.jsx\n      lib/\n    applications/\n      components/\n      context/applicationContext.jsx\n      lib/\n    connections/\n      components/\n      context/connectionContext.jsx\n      lib/\n    shared/\n      components/\n      context/\n      lib/\n      ui/\n    email/\n      templates/\n      lib/\n  prisma/\n    schema.prisma\n    migrations/\n  generated/prisma/\n  styles/\n  auth.js\n  Constants.js\n  package.json\n```\n\n## User Flow\n\n1. User lands on `/` and sees the welcome/sign-in screen.\n2. User signs in with Google (`next-auth`).\n3. Providers initialize app state (`SessionProvider`, auth, company, application, and connection contexts).\n4. User enters dashboard pages:\n   - `/dashboard` and `/companies` render the companies dashboard.\n   - `/applications` renders the applications dashboard.\n   - `/connections` renders the connections dashboard.\n5. User can create, edit, filter, update status, and delete:\n   - Companies (company pipeline)\n   - Applications (application pipeline)\n   - Connections (outreach pipeline)\n6. UI actions call API routes (`/api/company`, `/api/application`, `/api/connection`), which persist changes to PostgreSQL through Prisma.\n7. Changes are reflected in context state and rendered in list/detail components.\n\n## Local Setup\n\n### 1) Install dependencies\n\n```bash\nnpm install\n```\n\n### 2) Configure environment variables\n\nCreate a `.env` file with at least:\n\n```env\nDATABASE_URL=postgresql://...\nGOOGLE_CLIENT_ID=...\nGOOGLE_CLIENT_SECRET=...\n```\n\n### 3) Generate Prisma client and run schema/migrations\n\n```bash\nnpx prisma generate\nnpx prisma migrate deploy\n```\n\nIf you are iterating locally and want to push schema changes quickly:\n\n```bash\nnpx prisma db push\n```\n\n### 4) Start development server\n\n```bash\nnpm run dev\n```\n\nOpen `http://localhost:3000`.\n\n## Scripts\n\n- `npm run dev` - start local dev server\n- `npm run build` - generate Prisma client and build Next app\n- `npm run start` - run production build\n- `npm run lint` - run ESLint\n- `npm run test` - run Vitest\n- `npm run test:ui` - run Vitest UI\n\n## Notes\n\n- Prisma client is generated into `generated/prisma`.\n- API handlers for auth, companies, applications, and connections live under `app/api`.\n- Feature logic is grouped by domain under `features/` to keep concerns localized.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevaneyj3%2Fjob_search_tracker","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdevaneyj3%2Fjob_search_tracker","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdevaneyj3%2Fjob_search_tracker/lists"}