@in.work/in.work

Open Source Corporate Agile Tool

readme.md for @in.work/in.work

A modern Kanban project management system with bidirectional external sync capabilities. Built as a Jira alternative focused on simplicity, real-time collaboration, and seamless integration with external systems like Gitea, GitLab, and email.

Features

Core Kanban

Collaboration

External Sync

Access Control

API & Automation

Tech Stack

Quick Start

Prerequisites

Development Setup

  1. Clone the repository:
git clone https://github.com/your-org/in.work.git
cd in.work
  1. Create environment config:
mkdir -p .nogit
cat > .nogit/env.json << 'EOF'
{
  "MONGO_URL": "mongodb://localhost:27017",
  "MONGO_DB": "inwork",
  "JWT_SECRET": "your-secret-key-change-in-production"
}
EOF
  1. Start the development server:
deno task dev
  1. Access the application:

Default Admin

On first run, a platform admin is created:

Change this immediately in production!

API Overview

Authentication

# Login
curl -X POST http://localhost:3000/api/v1/auth/login \
  -H "Content-Type: application/json" \
  -d '{"email":"admin@in.work","password":"admin123"}'

# Use token in subsequent requests
curl http://localhost:3000/api/v1/organizations \
  -H "Authorization: Bearer <access_token>"

Key Endpoints

Method Endpoint Description
POST /api/v1/auth/login Login
POST /api/v1/auth/register Register
GET /api/v1/organizations List organizations
POST /api/v1/organizations Create organization
GET /api/v1/projects List projects
GET /api/v1/boards/:id Get board
GET /api/v1/boards/:id/cards Get board cards
POST /api/v1/boards/:id/cards Create card
POST /api/v1/cards/:id/move Move card
POST /api/v1/connections Create external connection
POST /api/v1/connections/:id/sync Trigger sync

Real-time WebSocket

Connect to receive live updates:

const ws = new WebSocket('ws://localhost:3000/ws/realtime?token=' + accessToken);

ws.onmessage = (event) => {
  const data = JSON.parse(event.data);
  console.log('Event:', data.type, data.data);
};

// Subscribe to a board
ws.send(JSON.stringify({
  action: 'subscribe',
  roomId: 'Board:xxx',
  roomType: 'board'
}));

Event Types

Project Structure

in.work/
├── ts/
│   ├── index.ts              # Entry point
│   ├── cli.ts                # CLI commands
│   ├── inwork.ts             # Main application class
│   ├── plugins.ts            # Dependency imports
│   ├── interfaces/           # TypeScript interfaces
│   ├── models/               # SmartData entities
│   ├── services/             # Business logic
│   ├── api/                  # REST API router
│   └── sync/                 # External sync engine
├── ui/                       # Angular 19 frontend
├── test/                     # Test files
├── .nogit/                   # Local config (gitignored)
├── deno.json                 # Deno configuration
└── readme.md

Configuration

Environment Variables

Variable Description Default
MONGO_URL MongoDB connection URL mongodb://localhost:27017
MONGO_DB Database name inwork
JWT_SECRET Secret for JWT signing Auto-generated (dev)
PORT Server port 3000
SMTP_HOST SMTP server for emails -
SMTP_USER SMTP username -
SMTP_PASS SMTP password -

External Sync

Gitea Setup

  1. Create OAuth application in Gitea
  2. Add connection via API:
curl -X POST http://localhost:3000/api/v1/connections \
  -H "Authorization: Bearer <token>" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "My Gitea",
    "systemType": "gitea",
    "config": {
      "baseUrl": "https://gitea.example.com",
      "token": "<gitea-token>"
    },
    "syncSettings": {
      "syncDirection": "bidirectional",
      "autoSync": true,
      "syncIntervalMinutes": 15
    }
  }'

License

MIT

changelog.md for @in.work/in.work

2025-12-07 - 1.2.0 - feat(comments)

Add comments subsystem: backend models & routes, realtime events, UI components, and tooling updates

2025-12-06 - 1.1.0 - feat(api)

Add full REST API, core models, auth, realtime and sync services

2025-12-06 - 1.0.0 - BREAKING CHANGE(auth)

Auto-login on registration and align frontend API responses

2025-12-06 - 0.2.0 - feat(ui)

Add full Angular frontend, embed built UI into backend, and implement core realtime/sync/services

2025-12-06 - unknown - initial

Initial commit: project scaffold and first files.