Here is the folder structure of this app.
jira-clone/
|- public/
|-- github.svg
|-- icon.svg
|- src/
|-- app/
|--- (auth)/
|--- (dashboard)/
|--- (standalone)/
|--- api/[[...route]]/
|--- apple-icon.png
|--- error.tsx
|--- favicon.ico
|--- globals.css
|--- icon1.png
|--- icon2.png
|--- layout.tsx
|--- not-found.tsx
|-- components/
|--- ui/
|--- analytics-card.tsx
|--- analytics.tsx
|--- date-picker.tsx
|--- dotted-separator.tsx
|--- logo.tsx
|--- mobile-sidebar.tsx
|--- modal-provider.tsx
|--- navbar.tsx
|--- navigation.tsx
|--- page-error.tsx
|--- page-loader.tsx
|--- projects.tsx
|--- query-provider.tsx
|--- responsive-modal.tsx
|--- sidebar.tsx
|--- source-code.tsx
|--- workspace-switcher.tsx
|-- config/
|--- db.ts
|--- index.ts
|-- features/
|--- auth/
|--- members/
|--- projects/
|--- tasks/
|--- workspaces/
|-- hooks/
|--- use-confirm.tsx
|--- use-debounce.ts
|-- lib/
|--- appwrite.ts
|--- hono.ts
|--- oauth.ts
|--- session-middleware.ts
|--- utils.ts
|- .env.example
|- .env.local
|- .eslintrc.json
|- .gitignore
|- .prettierrc.json
|- .prettierrc.mjs
|- bun.lockb
|- components.json
|- environment.d.ts
|- next.config.mjs
|- package.json
|- postcss.config.js
|- README.md
|- tailwind.config.ts
|- tsconfig.json
- Make sure Git and NodeJS is installed.
- Clone this repository to your local computer.
- Create
.env.local
file in root directory. - Contents of
.env.local
:
# disable next.js telemetry
NEXT_TELEMETRY_DISABLED=1
# app base url
NEXT_PUBLIC_APP_BASE_URL=http://localhost:3000
# appwrite project and key
NEXT_PUBLIC_APPWRITE_ENDPOINT=https://cloud.appwrite.io/v1
NEXT_PUBLIC_APPWRITE_PROJECT=XXXXXXXXXXXXXXXXXXXX
NEXT_PUBLIC_APPWRITE_IMAGES_BUCKET_ID=XXXXXXXXXXXXXXXXXXX
NEXT_APPWRITE_KEY=standard_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
# appwrite database ids
NEXT_PUBLIC_APPWRITE_DATABASE_ID=XXXXXXXXXXXXXXXXXXX
NEXT_PUBLIC_APPWRITE_MEMBERS_ID=XXXXXXXXXXXXXXXXXXX
NEXT_PUBLIC_APPWRITE_PROJECTS_ID=XXXXXXXXXXXXXXXXXXX
NEXT_PUBLIC_APPWRITE_TASKS_ID=XXXXXXXXXXXXXXXXXXX
NEXT_PUBLIC_APPWRITE_WORKSPACES_ID=XXXXXXXXXXXXXXXXXXX
Set NEXT_TELEMETRY_DISABLED
to 1
. This disables Next.js telemetry (optional).
Set the NEXT_PUBLIC_APP_BASE_URL
to http://localhost:3000
where your app will be running locally or in production.
- Create an account on Appwrite.
- Create a new project:
- Go to Dashboard > Create Project.
- Retrieve your Appwrite Endpoint and Project ID:
- Navigate to Settings > Overview > API Credentials.
- Copy the Endpoint and Project ID, and save them in
.env.local
asNEXT_PUBLIC_APPWRITE_ENDPOINT
andNEXT_PUBLIC_APPWRITE_PROJECT
.
- Go to the Overview tab.
- Navigate to Integrations > API Keys > Create API Key:
- Name:
jira-clone-web
(or any preferred name). - Expiration Time: Never.
- Scopes:
auth
session.write
users.read
.
- Name:
- Copy the generated API key and save it in
.env.local
asNEXT_APPWRITE_KEY
.
- Go to the Databases tab.
- Create a new database named
jira-clone
. - Copy the Database ID (displayed near the database name) and save it in
.env.local
asNEXT_PUBLIC_APPWRITE_DATABASE_ID
.
- Tasks Collection:
- Attributes:
workspaceId
(String, Required, Size: 50)name
(String, Required, Size: 256)projectId
(String, Required, Size: 50)assigneeId
(String, Required, Size: 50)description
(String, Optional, Size: 2048)dueDate
(DateTime, Required)status
(Enum, Required)- Elements: BACKLOG, TODO, IN_PROGRESS, IN_REVIEW, DONE
position
(Integer, Required, Min: 1000, Max: 1000000)
- Projects Collection:
- Attributes:
workspaceId
(String, Required, Size: 50)imageId
(String, Optional, Size: 50)name
(String, Required, Size: 256)
- Members Collection:
- Attributes:
userId
(String, Required, Size: 50)workspaceId
(String, Required, Size: 50)role
(Enum, Required)- Elements: ADMIN, MEMBER
- Workspaces Collection:
- Attributes:
name
(String, Required, Size: 256)userId
(String, Required, Size: 50)imageId
(String, Optional, Size: 50)inviteCode
(String, Required, Size: 10)
For each collection:
-
Navigate to Settings > Permissions.
-
Add the role All Users with Create, Read, Update, and Delete permissions and click Update.
-
Copy the Collection IDs (displayed near collection names) for each collection and save them in
.env.local
asNEXT_PUBLIC_APPWRITE_MEMBERS_ID
,NEXT_PUBLIC_APPWRITE_PROJECTS_ID
,NEXT_PUBLIC_APPWRITE_TASKS_ID
, andNEXT_PUBLIC_APPWRITE_WORKSPACES_ID
.
- Go to the Tasks collection.
- Navigate to the Indexes tab.
- Create a new index:
- Name:
task_name
. - Type: Full Text.
- Attribute: name.
- Order: DESC.
- Name:
- Go to the Storage tab.
- Create a new bucket named
images
(or any preferred name). - Configure bucket settings:
- Permissions: Add the role All Users with Create, Read, Update, and Delete permissions.
- Maximum File Size: Set to 1 MB.
- Allowed File Extensions: Add
jpg
,png
, andjpeg
. - Save the settings.
- Copy the Bucket ID (displayed near the bucket name) and save it in
.env.local
asNEXT_PUBLIC_APPWRITE_IMAGES_BUCKET_ID
.
- Go to the Auth tab in Appwrite > Settings.
- Enable Google and copy the provided Redirect URI.
- Visit the Google Cloud Console:
- Create a new project and configure the OAuth consent screen with default settings.
- Create OAuth 2.0 credentials:
- Add the copied Redirect URI from Appwrite as the Authorized Redirect URI.
- After creation, copy the generated Client ID and Client Secret.
- Return to Appwrite and paste the Client ID and Client Secret into the corresponding fields for App ID and App Secret, then click Update.
- Go to the Auth tab in Appwrite > Settings.
- Enable GitHub and copy the provided Redirect URI.
- Visit the GitHub Developer Settings:
- Under OAuth Apps, click New OAuth App.
- Fill out the required fields:
- Application Name:
Jira Clone
(or any preferred name). - Homepage URL:
http://localhost:3000
(or your app's base URL). - Authorization Callback URL: Paste the Redirect URI copied from Appwrite.
- Application Name:
- Click Register Application.
- After registration, you'll receive a Client ID and Client Secret.
- Return to Appwrite and paste the Client ID and Client Secret into the corresponding fields for App ID and App Secret, then click Update.
-
Install Project Dependencies using
npm install --legacy-peer-deps
oryarn install --legacy-peer-deps
orbun install --legacy-peer-deps
. -
Now app is fully configured π and you can start using this app using either one of
npm run dev
oryarn dev
orbun dev
.
NOTE: Please make sure to keep your API keys and configuration values secure and do not expose them publicly.
You might encounter some bugs while using this app. You are more than welcome to contribute. Just submit changes via pull request and I will review them before merging. Make sure you follow community guidelines.
Useful resources and dependencies that are used in Jira Clone.
- Thanks to CodeWithAntonio: https://codewithantonio.com/
- @hello-pangea/dnd: ^17.0.0
- @hono/zod-validator: ^0.4.1
- @hookform/resolvers: ^3.9.0
- @radix-ui/react-avatar: ^1.1.1
- @radix-ui/react-dialog: ^1.1.2
- @radix-ui/react-dropdown-menu: ^2.1.2
- @radix-ui/react-icons: ^1.3.0
- @radix-ui/react-label: ^2.1.0
- @radix-ui/react-popover: ^1.1.2
- @radix-ui/react-scroll-area: ^1.2.0
- @radix-ui/react-select: ^2.1.2
- @radix-ui/react-separator: ^1.1.0
- @radix-ui/react-slot: ^1.1.0
- @radix-ui/react-tabs: ^1.1.1
- @radix-ui/react-visually-hidden: ^1.1.0
- @tanstack/react-query: ^5.59.16
- @tanstack/react-table: ^8.20.5
- class-variance-authority: ^0.7.0
- clsx: ^2.1.1
- date-fns: ^4.1.0
- hono: ^4.6.7
- lucide-react: ^0.453.0
- next: 14.2.15
- next-themes: ^0.3.0
- node-appwrite: ^14.1.0
- nuqs: 1.19.1
- react: ^18
- react-big-calendar: ^1.15.0
- react-day-picker: 8.10.1
- react-dom: ^18
- react-hook-form: ^7.53.1
- react-icons: ^5.3.0
- react-use: ^17.5.1
- server-only: ^0.0.1
- sonner: ^1.5.0
- tailwind-merge: ^2.5.4
- tailwindcss-animate: ^1.0.7
- vaul: ^1.1.0
- zod: ^3.23.8
- @babel/eslint-parser: ^7.25.9
- @trivago/prettier-plugin-sort-imports: ^4.3.0
- @types/node: ^20
- @types/react: ^18
- @types/react-big-calendar: ^1.15.0
- @types/react-dom: ^18
- eslint: ^8
- eslint-config-next: 14.2.15
- eslint-config-prettier: ^9.1.0
- eslint-plugin-prettier: ^5.2.1
- postcss: ^8
- prettier: ^3.3.3
- prettier-plugin-tailwindcss: ^0.6.8
- tailwindcss: ^3.4.1
- tidy-imports: npm:@trivago/prettier-plugin-sort-imports
- sort-classes: npm:prettier-plugin-tailwindcss
- typescript: ^5
To learn more about Next.js, take a look at the following resources:
- Next.js Documentation - learn about Next.js features and API.
- Learn Next.js - an interactive Next.js tutorial.
You can check out the Next.js GitHub repository - your feedback and contributions are welcome!
The easiest way to deploy your Next.js app is to use the Vercel Platform from the creators of Next.js.
Check out Next.js deployment documentation for more details.
You can also give this repository a star to show more people and they can use this repository.