diff --git a/public/images/issue/issue-creation.png b/public/images/issue/issue-creation.png new file mode 100644 index 00000000..33face67 Binary files /dev/null and b/public/images/issue/issue-creation.png differ diff --git a/public/images/issue/issue-detail-pane-assignee-selection.png b/public/images/issue/issue-detail-pane-assignee-selection.png new file mode 100644 index 00000000..e14ca84d Binary files /dev/null and b/public/images/issue/issue-detail-pane-assignee-selection.png differ diff --git a/public/images/issue/main-interface.png b/public/images/issue/main-interface.png new file mode 100644 index 00000000..629b0a38 Binary files /dev/null and b/public/images/issue/main-interface.png differ diff --git a/public/images/issue/organisation-management.png b/public/images/issue/organisation-management.png new file mode 100644 index 00000000..d9de9806 Binary files /dev/null and b/public/images/issue/organisation-management.png differ diff --git a/public/images/issue/selection.png b/public/images/issue/selection.png new file mode 100644 index 00000000..72d623dc Binary files /dev/null and b/public/images/issue/selection.png differ diff --git a/public/images/issue/server-configuration.png b/public/images/issue/server-configuration.png new file mode 100644 index 00000000..3ee36d43 Binary files /dev/null and b/public/images/issue/server-configuration.png differ diff --git a/public/issue-icon.svg b/public/issue-icon.svg new file mode 100644 index 00000000..78f34730 --- /dev/null +++ b/public/issue-icon.svg @@ -0,0 +1,3 @@ + + + diff --git a/src/pages/projects/good-morning.astro b/src/pages/projects/good-morning.astro index 5267e9c8..3b5d8e65 100644 --- a/src/pages/projects/good-morning.astro +++ b/src/pages/projects/good-morning.astro @@ -22,7 +22,6 @@ export const metadata = { "Databases", "OAuth2", "Spotify API", - "Web", ], type: "personal", }; diff --git a/src/pages/projects/issue.astro b/src/pages/projects/issue.astro new file mode 100644 index 00000000..8067b2b9 --- /dev/null +++ b/src/pages/projects/issue.astro @@ -0,0 +1,110 @@ +--- +import ProjectPage from "../../components/ProjectPage.astro"; +import Demo from "../../components/Demo.astro"; + +export const metadata = { + title: "Issue", + description: + "A simple project management tool for developers. Born out of frustration with Jira.", + date: "December 2025 - Present", + slug: "issue", + image: "/issue-icon.svg", + url: "https://issue.ob248.com", + github: "https://github.com/hex248/issue", + hidden: false, + tags: [ + "Web", + "React", + "TypeScript", + "Tauri", + "PostgreSQL", + "Databases", + "Bun", + ], + type: "personal", +}; +--- + + +

+ Issue is a lightweight, self-hostable project management tool built for + developers who want simplicity over complexity. Frustrated with bloated + tools like Jira, I created Issue to focus on what matters: tracking tasks + within organisations and projects without the overhead. Deploy it on your + own infrastructure for full control over your data, and access it via the + web or as a native desktop application via Tauri. +

+ +
+
+

Key features

+
    +
  • Organisation and project management
  • +
  • Issue creation with titles and descriptions
  • +
  • Issue assignment to team members
  • +
  • Resizable split-pane interface
  • +
  • Role-based access (owner, admin, member)
  • +
  • Native desktop app via Tauri
  • +
  • Self-hostable
  • +
+
+ +
+

Technologies

+
    +
  • React + TypeScript (frontend)
  • +
  • Bun + Drizzle ORM (backend)
  • +
  • PostgreSQL
  • +
  • Tauri (desktop)
  • +
  • Tailwind CSS
  • +
  • JWT authentication
  • +
+
+
+ +
+

Architecture

+

+ Issue uses a monorepo structure with three packages: a shared package + containing database schemas and types, a backend API server running on Bun + with Drizzle ORM, and a React frontend that can be served as a web app or + bundled as a native desktop application with Tauri. +

+
+ +
+

Screenshots

+
+ + + + + + +
+
+