Create. Review. Collaborate. — All in Express.
JODNA is a lightweight, designer-focused ticket and review system built as an Adobe Express add-on.
Inspired by the Hindi/Urdu word "जोड़ना" (jodna) meaning to join or to connect, JODNA seamlessly connects design teams, feedback loops, visual assets, and iterative workflows — without the complexity of full-scale tools like Jira.
Most ticket tools are built for engineers — JODNA is built for designers.
It removes friction from feedback cycles, asset sharing, and revisions while staying minimal and integrated where designers already work: inside Adobe Express.
- Admin-led Workspaces: Admins create isolated organizations.
- Invite-Only Access: Join via unique invite codes.
- Role-based Access Control:
ADMIN: Full control over org, projects, and users.MANAGER: Can manage projects and tickets.DESIGNER: Focus on tickets and assets.
- Project Structure: Organize work into projects (Active/Closed).
- Lightweight Tickets: Assign tasks with titles, descriptions, and deadlines.
- Rich Attachments: Admins attach reference images directly to tickets.
- Express Project Linking: Designers can link their Adobe Express projects to tickets.
- Linear Review Log: A GitHub-issue style history of all feedback.
- Visual Feedback: Admin comments can include image attachments.
- Status Workflow:
Open→InProgress→Review→Done.
- Smart To-Dos: Uses Google Gemini API to automatically break down ticket descriptions into actionable checklists.
- Shared Assets: Central repository for brand assets/logos accessible to the whole org.
- Secure Storage: Assets stored directly in MongoDB (Buffer) for small-scale portability (POC).
- Authentication: Google OAuth 2.0 & Local (Email/Password).
- Authorization: Session-based auth with JWT support.
- Framework: React
v18.2.0 - UI System: Adobe Spectrum Web Components (
@swc-react/*) - Styling: Vanilla CSS + Spectrum Design Tokens
- Build Tool: Webpack 5 (via
@adobe/ccweb-add-on-scripts) - HTTP Client: Axios
- Runtime: Node.js
- Framework: Express.js
v5.2.1 - Database: MongoDB (Mongoose ODM)
- AI: Google Generative AI (Gemini)
- File Handling: Multer (Memory Storage)
The database is designed around 6 core models:
| Field | Type | Description |
|---|---|---|
displayName |
String | User's full name |
email |
String | Unique email address |
role |
Enum | ADMIN, MANAGER, DESIGNER |
organization |
ObjectId | Reference to Organization |
| Field | Type | Description |
|---|---|---|
name |
String | Org name |
owner |
ObjectId | User who owns the org |
inviteCode |
String | Unique code for joining |
| Field | Type | Description |
|---|---|---|
name |
String | Project name |
status |
Enum | Active, Closed |
organization |
ObjectId | Links project to org |
| Field | Type | Description |
|---|---|---|
title |
String | Task title |
status |
Enum | Open, InProgress, Review, Done |
todos |
Array | List of subtasks { text, isCompleted } |
attachments |
Array | Buffer data of reference images |
expressProjectLink |
String | Link to Adobe Express file |
| Field | Type | Description |
|---|---|---|
ticket |
ObjectId | One-to-one link with Ticket |
comments |
Array | Linear log of text + attachments |
| Field | Type | Description |
|---|---|---|
data |
Buffer | Binary image data |
organization |
ObjectId | Org who owns the asset |
JODNA/
├── backend/ # Express Server
│ ├── config/ # DB & Auth setup
│ ├── middleware/ # Auth checks
│ ├── models/ # Mongoose Schemas (User, Ticket, etc.)
│ ├── routes/ # API Routes (auth, tickets, ai, etc.)
│ ├── server.js # Entry point
│ └── .env # Secrets
│
├── frontend/ # Adobe Express Add-on
│ ├── src/ # React Source
│ │ ├── components/ # UI Components
│ │ ├── config.js # API URL config
│ │ └── App.jsx # Main generic entry
│ ├── package.json # Dependencies
│ └── webpack.config.js # Build config
│
├── DEPLOYMENT_GUIDE.md # Detailed deployment production steps
└── README.md # Project documentation
- Node.js (v18+)
- MongoDB (Local or Atlas)
- Adobe Express Account
git clone https://github.com/Sparshkalia/Jodna.git
cd JODNAcd backend
npm installCreate a .env file in backend/:
PORT=5000
MONGO_URI=mongodb://localhost:27017/jodna
GOOGLE_CLIENT_ID=your-google-id
GOOGLE_CLIENT_SECRET=your-google-secret
SESSION_SECRET=your-secret
FRONTEND_URL=https://localhost:5241
GEMINI_API_KEY=your-gemini-keyStart the server:
npm start
# Server runs on http://localhost:5000cd frontend
npm install
npm start
# Dev server runs on https://localhost:5241- Go to Adobe Express.
- Open the Add-ons panel (left sidebar).
- Enable Developer Mode.
- Click Connect local add-on.
- Enter:
https://localhost:5241.
- Run Backend:
npm startin/backend. - Run Frontend:
npm startin/frontend. - Testing:
- Access API at
http://localhost:5000. - Access UI inside Adobe Express via the Add-on panel.
- Note: Ensure
FRONTEND_URLin.envmatches your add-on's origin.
- Access API at
For private distribution as a Proof of Concept:
-
Deploy Backend:
- Push
/backendto GitHub. - Deploy on Render.com (Web Service).
- Set Environment Variables on Render.
- Push
-
Package Frontend:
- Update
frontend/src/config.jswith new Backend URL. - Run
npm run packagein/frontend. - Generates a
.zipfile.
- Update
-
Distribute:
- Upload
.zipto Adobe Express Add-on Console. - Create a Private Link.
- Share link with testers.
- Upload
See DEPLOYMENT_GUIDE.md for full details.
This project is licensed under the MIT License.