Gitikus is a frontend dashboard for exploring GitHub repositories through a fast, dashboard-first UI.
It combines repository overview metrics, recent activity, searchable issue and pull request lists, detail views, and runtime repository configuration in a single React application.
- Repository dashboard with:
- open and closed issues
- open and closed pull requests
- labels
- contributors
- stars, forks, watchers, default branch, CI status, and last update
- Recent issue and pull request previews with direct GitHub links
- Dedicated issue and pull request detail pages
- Dedicated labels and contributors views
- Infinite loading for large lists
- URL-synced filters and pagination state for shareable views
- TanStack Query caching for server state
- Runtime repository and token configuration through the UI
- Unit tests for core components and utilities
- Cypress end-to-end coverage for key user flows
- Storybook examples for isolated UI review
- Separate CI workflows for unit and E2E verification
- React 19
- TypeScript
- Vite
- Bootstrap 5
- TanStack React Query
- React Router
- Axios
- Vitest
- Cypress
- React Testing Library
- Storybook
- GitHub Actions
- Node.js
22.22.0 - npm
>= 10
Optional for containerized local development:
- Docker
- Docker Compose
- Install dependencies:
npm install- Optionally create a local env file:
cp .env.example .env- Optionally update
.envwith your preferred repository and GitHub token:
REMOTE_GIT_API_TOKEN=
REMOTE_GIT_REPOSITORY=facebook/react- Start the development server:
npm run devThe app runs at http://localhost:5173.
All environment variables are optional.
REMOTE_GIT_API_TOKEN=
REMOTE_GIT_REPOSITORY=REMOTE_GIT_API_TOKEN- Optional.
- Intended for local development.
- Helps avoid GitHub API rate limits.
REMOTE_GIT_REPOSITORY- Optional initial repository.
- Accepts either
owner/repositoryor a full repository URL `https://github.com/owner/repository.
If no repository is provided through the environment, Gitikus falls back to the app default and can still be changed later through the in-app setup flow or settings page.
REMOTE_GIT_API_TOKEN is read through import.meta.env, which means it becomes part of the frontend build.
For local development, that is fine when the value lives in your untracked .env.
For public deployments:
- do not inject a secret token unless you explicitly accept that it will be client-visible
- or move GitHub API access behind a backend/API layer if you need a private token
Start the development server:
npm run devCreate a production build:
npm run buildPreview the production build locally:
npm run previewRun tests:
npm run testRun tests in watch mode:
npm run test:watchOpen Cypress with the app server started automatically:
npm run e2eOpen Cypress only. This requires the E2E app server to already be running on http://127.0.0.1:4173:
npm run dev:e2e
npm run e2e:openRun the Cypress suite headlessly. This also requires the E2E app server to already be running on http://127.0.0.1:4173:
npm run dev:e2e
npm run e2e:runStart the app and run Cypress end to end:
npm run test:e2eThe E2E server uses Vite --mode e2e, which clears repository and token env defaults so the Cypress flows start from a deterministic app state.
Run linting and formatting checks:
npm run lint
npm run format:checkRun Storybook for isolated UI demos:
npm run storybookBuild the static Storybook site:
npm run build-storybookRun the app with Docker Compose:
docker compose upBehavior notes:
- the app is served at
http://localhost:5173 - the repository is bind-mounted for live editing
- dependencies are installed inside the container-managed volume
- if dependencies change, restart the service
- if the volume gets out of sync, reset with
docker compose down -v
MIT. See LICENSE.
/issues and /pulls keep list state in the URL:
qsearch textstateopen, closed, or allsortupdated, created, or commentsorderascending or descendinglabelselected labelpagesnumber of loaded pages
This allows refresh and sharing without losing the current view.
- on first launch, the app can be configured through the setup flow
- repository and token override can also be changed later from the settings view
- repository selection and runtime config are persisted in
localStorage
High-level data flow:
runtime config/local storage -> repository state -> React Query hooks -> GitHub API -> feature UI -> route pages
The main architectural pieces are:
@appfor router, providers, and the application shell@pagesfor thin route entrypoints only@featuresfor user-facing workflows like dashboard, repository config, labels, and contributors@entitiesfor GitHub domain API, models, query keys, query hooks, and domain UI@sharedfor generic reusable UI and utilities@statefor runtime app state like the active repository and sync orchestration
Gitikus is a static frontend and can be deployed to any host that can serve the dist/ directory.
The current project setup is compatible with Azure Static Web Apps, but any comparable static host will work.
Live deployment:
If you deploy a public build, avoid injecting REMOTE_GIT_API_TOKEN unless you explicitly want it exposed to the browser.