Streamline Your Job Search with Precision and Ease
With JobJourney, effortlessly manage and track every application, from submissions to interviews, in a single portal. Forget Excel – our tool is designed to organize all your application data, including files, notes, and interview insights, all in one place for easy access and analysis.
Seamless Application Management Track each job application without the hassle of manual data entry. Upload screenshots, files, and relevant information for complete records.
Centralize everything – from resumes to feedback. Keep all related documents securely stored with each application.
Record interview questions, answers, and notes. Optionally, share insights with others on our community page or keep it private for personal reference.
Easily sort and review applications by status, prioritize tasks, and stay organized without clutter.
- Feature Branches: Branch name should start with
feat/your-branch-name
- Bug fixes: Branch name should start with
bugfix/[githubIssueId]-bug-name
├── public
├── src
│ ├── app
│ │ ├── api # API routes for the application
│ │ ├── page.tsx # Main entry page for the app
│ │ ├── layout.tsx # Main layout for the app
│ │ ├── favicon.ico # Favicon for the app
│ │ └── global.css # Global CSS styles
│ ├── appwrite # Appwrite-related configuration and setup
│ ├── components # Reusable UI components
│ ├── config # Configuration and environment variables
│ ├── hooks # Custom React hooks
│ ├── lib
│ │ └── server # Server-specific libraries and functions
│ ├── types # TypeScript types and interfaces
│ └── utils # Utility functions and helpers
└── README.md # Project documentation
In this project, API routes are centralized in an apiRoutes object to improve organization and maintainability. This structure provides several advantages:
-
Centralized Management: All API endpoints are stored in one object (apiRoutes), making them easy to locate, update, and manage across the application.
-
Consistency and Readability: Each route follows a clear naming convention, using actions like getAll, getOne, add, update, and delete, which improves readability and consistency.
-
Modular Structure: Routes are organized by feature or module (e.g., applications, interviewQuestions), which keeps related routes together and simplifies maintenance.
-
Scalability: This structure is designed to support the addition of new API routes and functionalities without cluttering the codebase.
const apiRoutes = {
applications: {
getAll: '/api/applications/getAll',
getOne: '/api/applications/getOne',
add: '/api/applications/add',
update: '/api/applications/update',
delete: '/api/applications/delete',
},
applicationDocuments: {
add: '/api/application-documents/add',
update: '/api/application-documents/update',
},
interviewQuestions: {
getAll: '/api/interview-questions/getAll',
getOne: '/api/interview-questions/getOne',
add: '/api/interview-questions/add',
update: '/api/interview-questions/update',
delete: '/api/interview-questions/delete',
},
files: {
upload: '/api/files/upload',
delete: '/api/files/delete',
},
usersPrefs: {
update: '/api/user/prefs/update',
},
};
To get run the application locally, creat a file named .env.local
and copy the below variables or from .env.example
NEXT_PUBLIC_APPWRITE_PROJECT_ID=
NEXT_PUBLIC_APPWRITE_API_ENDPOINT=
NEXT_PUBLIC_APPWRITE_API_KEY=
NEXT_PUBLIC_APPLICATION_DB=
NEXT_PUBLIC_APPLICATION_DB_COLLECTION_ID=
NEXT_PUBLIC_TINYMCE_API_KEY=
NEXT_PUBLIC_APPLICATION_DB_DOCUMENTS_COLLECTION_ID=
NEXT_PUBLIC_APPLICATION_DB_INTERVIEW_QUESTIONS_COLLECTION_ID=
# GCP credentials
PROJECT_ID=
CLIENT_EMAIL=
PRIVATE_KEY=
BUCKET_NAME=
# UI configuration
NEXT_PUBLIC_UI_SHOW_DATA=
NEXT_PUBLIC_UI_SHOW_UPLOADER=
- Next.js: Framework for server-rendered React applications with routing, API routes, and SEO optimization.
- TypeScript: Strongly-typed JavaScript for enhanced development experience and reliability.
- Appwrite: Backend-as-a-service for database management and user authentication, handling all backend operations like data storage and authentication.
- Radix UI: Low-level, accessible, and customizable UI components, such as accordions, dialogs, checkboxes, and more.
- Tailwind CSS: Utility-first CSS framework for custom styling, used alongside plugins like tailwindcss-animate and @tailwindcss/typography.
- Lucide React: Icon libraries for versatile and customizable icons.
- Next Themes: Allows theme switching in Next.js applications, helping implement a dark/light mode feature.
- React Hook Form: A lightweight library for form handling and validation.
- @hookform/resolvers: Adapters for integrating validation libraries (such as Zod) with React Hook Form.
- Zod: TypeScript-first schema declaration and validation library, useful for form validation and data type checking.
- Date-fns: Utility library for manipulating and formatting dates, particularly useful for user-friendly date displays.
- React Day Picker: Component for handling date selection, useful for scheduling or date-picking interfaces.
- React Query: Data-fetching and caching library, especially useful for managing server state in React applications, with dev tools to visualize and debug state.
- TinyMCE React: WYSIWYG editor that provides a rich text editing experience for users, often used for content creation.
- Google Cloud Storage: Storage solution for managing and storing files in the cloud.
- Lodash and Lodash.debounce: Utility libraries for data manipulation, including performance optimization with debouncing.
- Nanoid: Small, secure, URL-friendly unique ID generator.
- Clsx and Classnames: Utilities for managing CSS class names conditionally.
- DomPurify: Library to sanitize HTML content, protecting against XSS attacks.
- ESLint: Linter for identifying and fixing code issues, configured with eslint-config-next for Next.js projects.
- TailwindCSS and PostCSS: Tools for CSS processing and transformations.
- TypeScript: Provides static typing to catch errors early in development.