Replace the plain <select> with an HTML5 <input> + <datalist> pair so
users can type to filter repositories. Add debounced input handler for
label loading, change event for direct datalist selection, and client-side
validation that the entered value is a known repository.
Closesleeworks-agents/gitea-mobile#87
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add a repo dropdown to the filter bar that appears when an org is
selected. The dropdown lists all repos in the selected org and
filters issues/pulls to the chosen repo. Changing the org resets
the repo filter. Infinite scroll preserves the repo filter.
Closesleeworks-agents/gitea-mobile#83
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add a label text input to the filter bar on both issues and pulls
list views. The filter is passed through to the Gitea API's native
labels query parameter for server-side filtering. Infinite scroll
preserves the label filter across page loads.
Closesleeworks-agents/gitea-mobile#82
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Fetch and display PR comments in the pull request detail page,
using the same Gitea issue comments API endpoint. Shows author,
timestamp, and body for each comment, with a friendly empty state
when no comments exist.
Closesleeworks-agents/gitea-mobile#81
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Mirror the existing issues state filter pattern: read state query param
(default "open"), pass it to ListAllPullRequests instead of hardcoded
"open", and add a state select widget to the pulls filter bar with
proper hx-include for HTMX partial reloads and infinite scroll.
Closesleeworks-agents/gitea-mobile#72
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add the ability to assign users to issues from the mobile app:
- New ListCollaborators client method fetches repo collaborators
- New AssignIssue client method sets assignees via PATCH API
- New POST /issues/{owner}/{repo}/{index}/assignees handler
- Assignee dropdown populated with repo collaborators in issue detail
- HTMX inline response confirms assignment without page reload
Closesleeworks-agents/gitea-mobile#50
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add dynamic label selection when creating a new issue:
- New GET /issues/new/labels endpoint returns label checkboxes for a repo
- When a repo is selected, labels are fetched via HTMX and displayed as
checkboxes with colored label badges
- CreateIssue handler now parses label_ids from form and passes them to
the Gitea API
- Shows "No labels available" message when repo has no labels
Closesleeworks-agents/gitea-mobile#67
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add an org filter select to the dashboard that allows users to narrow
the triage queue to a specific organization. The filter uses HTMX to
update the view without a full page reload, mirroring the pattern
already used in the issues and pulls views.
Closesleeworks-agents/gitea-mobile#68
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Update ListAllIssues and ListAllPullRequests to accept state and page
parameters, returning paginated results (20 per page) with HasMore
metadata. ListIssues and ListPulls handlers now read page, org, and
state query params; HTMX requests for page > 1 return only card HTML
fragments for seamless infinite scroll. Both templates extract a
reusable "cards" block and pulls.html gains a scroll sentinel matching
the existing issues.html pattern. Filter changes reset to page 1.
Closesleeworks-agents/gitea-mobile#32
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add SetIssueState client method and handler for toggling issue state
between open and closed via PATCH API. Add AddComment client method
wrapping PostComment. Register new routes POST /issues/{owner}/{repo}/{index}/state
and POST /issues/{owner}/{repo}/{index}/comments. Update issue_detail.html
template with comment form (HTMX inline append) and close/reopen button
(HTMX inline swap of state badge).
Closesleeworks-agents/gitea-mobile#29
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add a sticky top bar with a refresh button that uses HTMX to re-fetch
the current view content without a full page reload. Works on dashboard,
issues, and pulls views via the shared layout template.
Closesleeworks-agents/gitea-mobile#51
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add RenderMarkdown method to gitea client that calls POST /api/v1/markdown
to convert raw markdown text to safe HTML. Wire it into IssueDetail and
PullDetail handlers to render body content as formatted markdown.
Falls back gracefully to plain text if the API call fails.
Templates updated to use RenderedBody (template.HTML) with fallback
to raw Issue.Body/Pull.Body when rendering fails.
Closesleeworks-agents/gitea-mobile#35
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add client-side validation to ensure a repository is selected before
form submission. Split owner/repo on both change and submit events.
Show inline error messages via form-error div. Update CreateIssue
handler to return HTMX-friendly HTML error fragments on 400/500.
Closesleeworks-agents/gitea-mobile#30
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Replace inline fmt.Sprintf HTML generation in Dashboard, ListIssues,
and ListPulls handlers with template.ParseFiles rendering of
dashboard.html, issues.html, and pulls.html respectively.
ListIssues now reads ?org= and ?state= query params to filter results.
ListPulls now reads ?org= query param to filter results.
Closesleeworks-agents/gitea-mobile#34
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Register GET /issues/new route and implement NewIssue handler that
fetches orgs/repos via ListOrgsAndRepos and renders the existing
create_issue.html template. Supports HTMX partial responses.
Closesleeworks-agents/gitea-mobile#28
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add CloseIssue (PATCH state=closed) and PostComment (POST comment body)
methods to the Gitea client with cache invalidation. Add corresponding
handler routes POST /issues/{owner}/{repo}/{index}/close and
POST /issues/{owner}/{repo}/{index}/comment with HTMX support.
Include unit tests for both client methods.
Closesleeworks-agents/gitea-mobile#36
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add GET /issues/{owner}/{repo}/{index} and GET /pulls/{owner}/{repo}/{index}
routes that fetch individual issues/PRs from the Gitea API and render them
using the existing issue_detail.html and pull_detail.html templates.
New client methods:
- GetIssue: fetch a single issue by owner/repo/index
- GetPull: fetch a single pull request by owner/repo/index
- GetIssueComments: fetch comments for an issue
- GetRepoLabels: fetch available labels for a repository
Both handlers support HTMX fragment responses and full-page rendering,
consistent with the existing handler pattern.
Closesleeworks-agents/gitea-mobile#24
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Collapse Set image tag, Build Docker image, and Push image steps into
a single step that computes TAG inline, eliminating the dependency on
$GITHUB_OUTPUT which is not reliably available in Gitea Actions runners.
Also moves registry login before the build+push step for correct ordering.
Closesleeworks-agents/gitea-mobile#25
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The Gitea Actions workflow used ${{ github.sha }} which is GitHub Actions
syntax. In Gitea Actions the correct context variable is ${{ gitea.sha }}.
This caused the image tag SHA component to be empty.
Closesleeworks-agents/gitea-mobile#20
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Download htmx.org v1.9.10 into static/htmx.min.js and update all
references (layout.html, handlers.go fallback page, sw.js precache
list) to use the local copy. This enables the PWA to work fully
offline since the service worker can now cache htmx from the same
origin.
Bump service worker cache version to v2 so existing installations
pick up the new asset list.
Closesleeworks-agents/gitea-mobile#17
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Build all frontend views using Go html/template with HTMX interactions
and mobile-first CSS with dark mode and iPhone safe areas.
Templates:
- layout.html: base layout with fixed bottom nav (Dashboard, Issues, PRs, Settings)
- dashboard.html: card-based triage view with priority indicators
- issues.html: issue list with filter bar (org, state) and infinite scroll
- pulls.html: PR list with diff stats and merge status
- issue_detail.html: issue detail with comments, label assignment
- pull_detail.html: PR detail with diff stats and review form
- create_issue.html: issue creation form with searchable repo selector
CSS (static/style.css):
- Mobile-first dark mode with CSS variables
- iPhone safe areas via env(safe-area-inset-bottom)
- Responsive: 2-column grid at 640px+ breakpoint
- Light mode support via prefers-color-scheme
- Card, label, badge, form, button component styles
- HTMX loading indicator and spinner animation
- Reduced motion support
HTMX patterns:
- hx-get with hx-target for SPA-like navigation
- hx-trigger="revealed" for infinite scroll
- hx-post with hx-swap for inline form actions
- Filter bar with hx-trigger="change" and hx-include
Closesleeworks-agents/gitea-mobile#5
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add Progressive Web App support for installable mobile experience
on iOS Safari and Android Chrome.
- static/manifest.json: app name, standalone display, dark theme,
icon references for 192px and 512px
- static/sw.js: service worker with cache-first strategy for static
assets, network-first for HTML/HTMX, offline fallback to cache
- static/icon-192.png, static/icon-512.png: placeholder app icons
- Apple meta tags: apple-mobile-web-app-capable, status bar style,
apple-touch-icon for iOS Add to Home Screen
- Service worker registration in base layout template
Closesleeworks-agents/gitea-mobile#6
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Add multi-stage Dockerfile producing a minimal distroless image and
Gitea Actions CI workflow for automated testing and image publishing.
- Dockerfile: multi-stage build (golang:1.22-alpine -> distroless/static)
with stripped binary (~15-20MB image), runs as nonroot user
- .dockerignore: excludes .git, docs, nix files from build context
- .gitea/workflows/build.yaml: CI pipeline that runs tests, builds
Docker image, and pushes to Gitea registry with timestamp+SHA tags
for Flux image automation
Closesleeworks-agents/gitea-mobile#7
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Implement all HTTP handlers using Go 1.22+ stdlib ServeMux with
HTMX fragment vs full-page response detection.
- internal/handlers/handlers.go: all route handlers
- GET /health returns 200 for K8s probes
- GET / dashboard with triage queue from aggregation layer
- GET /issues lists all issues across orgs
- GET /pulls lists all PRs across orgs
- POST /issues creates issue via aggregation layer
- POST /issues/{owner}/{repo}/{index}/labels assigns labels
- POST /pulls/{owner}/{repo}/{index}/review submits PR review
- HX-Request header detection for HTMX fragment vs full page
- Mobile-first dark theme base layout with bottom navigation
- cmd/server/main.go: refactored to use centralized route registration
- internal/handlers/handlers_test.go: unit tests for health, dashboard,
HTMX detection, input validation
Closesleeworks-agents/gitea-mobile#4
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>