https://github.com/henfrydls/skima
Open-source people development platform: skills matrix, development plans, gap analysis, and team growth tracking. Self-hosted, local-first.
https://github.com/henfrydls/skima
competency-tracking hr-tech local-first nodejs open-source react self-hosted skills-matrix sqlite talent-management team-analytics
Last synced: about 1 month ago
JSON representation
Open-source people development platform: skills matrix, development plans, gap analysis, and team growth tracking. Self-hosted, local-first.
- Host: GitHub
- URL: https://github.com/henfrydls/skima
- Owner: henfrydls
- License: other
- Created: 2025-10-23T16:49:11.000Z (8 months ago)
- Default Branch: main
- Last Pushed: 2026-05-10T05:05:34.000Z (about 1 month ago)
- Last Synced: 2026-05-10T06:53:05.435Z (about 1 month ago)
- Topics: competency-tracking, hr-tech, local-first, nodejs, open-source, react, self-hosted, skills-matrix, sqlite, talent-management, team-analytics
- Language: JavaScript
- Homepage: https://skima.henfrydls.com/
- Size: 7.75 MB
- Stars: 2
- Watchers: 0
- Forks: 1
- Open Issues: 7
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
Open-source people development platform — skills matrix, development plans, gap analysis, and team growth tracking.
Self-hosted, local-first. No account, no cloud, no tracking.
Install ·
Features ·
Screenshots ·
Tech Stack
## Features
- **Executive Dashboard** — KPIs, gap analysis, and trend tracking at a glance
- **Team Skills Matrix** — transposed heatmap view showing strengths and gaps across the team
- **Collaborator Profiles** — individual evolution sparklines and skill breakdowns
- **Evaluation System** — weighted formula (level x frequency x criticality) for objective scoring
- **Role Profiles** — define expected competencies per role and track alignment
- **Development Plans (IDPs)** — create growth plans for team members, link goals to skill gaps, track actions and progress
- **Time Travel** — compare team state across quarters, semesters, and years
- **Demo Mode** — explore with rich sample data before configuring your own
- **Export / Import** — move data in and out as needed
- **Cross-platform Desktop** — Windows, macOS, and Linux via Tauri 2
- **Offline-first** — works 100% offline, all data stored locally in SQLite
---
## Screenshots
Executive Dashboard — KPIs, gap analysis, and trend tracking at a glance
Team Skills Matrix — Transposed heatmap showing strengths and gaps
Evolution — Track team progress over time
Role Profiles — Define expected competencies per role and track alignment
Development Plans — Create growth plans, link goals to skill gaps, track actions and progress
Setup — Get started with demo data or configure your own space
---
## Installation
Skima runs entirely on your device — no account, no cloud, no tracking.
- **[Desktop app](#desktop-app)** (Windows, macOS, Linux) — Download from GitHub Releases
- **[Docker](#docker)** — Self-hosted via `docker compose`
- **[From source](#from-source)** — Clone and build
### Desktop App
Download the latest release for your platform from [GitHub Releases](https://github.com/henfrydls/Skima/releases):
| Platform | Format |
|----------|--------|
| Windows | `.exe` installer |
| macOS | `.dmg` disk image |
| Linux | `.deb` / `.AppImage` |
Just install and open — no setup, no accounts, no internet required.
#### First time on macOS? One extra step needed
Skima is open-source and not signed with a paid Apple Developer certificate, so macOS Gatekeeper will block the app on first launch with the message *"Apple could not verify Skima is free of malware."* This is a one-time setup step. Pick one method:
**Method 1 — Terminal (recommended, 1 step)**
After dragging Skima.app to Applications, open Terminal and run:
```bash
xattr -cr /Applications/Skima.app
```
Then double-click Skima.app — it opens normally without warning.
**Method 2 — System Settings (manual, 4 steps)**
1. Try opening Skima.app — Apple shows the "could not verify" dialog. Click **Done**.
2. Open **System Settings → Privacy & Security**.
3. Scroll down to *"Skima was blocked..."* and click **Open Anyway**.
4. Enter your admin password to confirm.
> macOS 15 (Sequoia) and later: the **Open Anyway** button only appears in System Settings, never in the alert dialog itself.
**Why this happens:** Apple charges $99/year for code-signing certificates required to bypass Gatekeeper. As a free open-source project, we'll get certified once Skima has enough users to justify it. Your install method is safe — Skima is fully [open source](https://github.com/henfrydls/Skima) and you can audit the code.
#### Automatic Updates
Starting with **v1.4.0**, Skima checks for new releases on startup and lets you install them in-app — no more manual reinstalls.
- A modal appears when a new version is available, with `Update now` / `Remind me later` / `Skip this version` options
- Trigger a manual check anytime under **Settings → About → Check for updates**
- Disable auto-checks via the **Check for updates automatically** toggle in the same panel
> **Upgrading from v1.3.5 or earlier?** The auto-updater first ships in v1.4.0, so existing installs need to download v1.4.0 manually one time. After that, all future updates are automatic.
Updates are cryptographically signed; Skima refuses any binary that doesn't match the publisher signature.
**Linux note:** auto-update works for the **AppImage** build. If you installed via `.deb` or `.rpm`, your system package manager owns the install path so Skima can't replace itself in-place — Skima will detect this and prompt you to download the latest release from GitHub manually. Switch to the AppImage build if you want fully automatic updates.
### Docker
Run Skima as a local web service with a single command. Requires [Docker](https://docs.docker.com/get-docker/).
```bash
docker compose up -d
```
Or pull directly from GitHub Container Registry:
```bash
docker pull ghcr.io/henfrydls/skima:latest
docker run -d -p 3000:3001 -v skima-data:/app/data ghcr.io/henfrydls/skima:latest
```
Open `http://localhost:3000` in your browser. Data persists in a Docker volume.
To run with demo data pre-loaded:
```bash
docker compose -f docker-compose.yml -f docker-compose.demo.yml up -d
```
### From Source
Requires [Node.js](https://nodejs.org/) 20+.
```bash
git clone https://github.com/henfrydls/Skima.git
cd Skima
npm install
npm run dev
```
Open `http://localhost:5173` in your browser. The API runs at `http://localhost:3001`.
To build the desktop app from source, you also need [Rust](https://www.rust-lang.org/tools/install):
```bash
npm run tauri:build
```
---
Development and Testing
### Commands
```bash
npm install # Install all dependencies (root + client + server)
npm run dev # Start client (5173) + server (3001) concurrently
npm run dev:client # Frontend only
npm run dev:server # Backend only
npm run build # Production build (client + server)
npm run tauri:build # Build desktop installer (requires Rust)
```
### Database
```bash
npm run db:migrate # Run Prisma migrations
npm run db:push # Sync schema without migration
npm run db:seed # Load demo data
```
### Testing
```bash
npm test # All tests (939 tests, 75%+ coverage)
npm run test:client # React component and logic tests (771 tests)
npm run test:server # API and middleware tests (168 tests)
npm run test:coverage # Full coverage report (client + server)
```
### Project Structure
```
client/src/
components/
auth/ # LoginModal, ProtectedRoute
common/ # Button, Card, Badge, StatCard, etc.
dashboard/ # ExecutiveKPIGrid, DashboardHeader, StrategicInsights
development/ # PlanCard, GoalAccordion, ActionRow, GapSuggestions
evolution/ # EvolutionChart, EvolutionList
layout/ # Layout, Sidebar
matrix/ # TransposedMatrixTable, CollaboratorList
settings/ # CategoriesTab, CollaboratorsTab, SkillsTab, DevelopmentTab, EvaluationsTab
contexts/ # AuthContext, ConfigContext
hooks/ # useEvolutionData
lib/ # dashboardLogic, skillsLogic, evolutionLogic
pages/ # DashboardView, TeamMatrixPage, EvolutionPage
App.jsx
server/src/
routes/ # auth.js, evolution.js, demo.js, development.js
middleware/ # auth.js (JWT)
data/ # seedData.js
db.js # Prisma client + dynamic DB path
index.js # Express app + all routes
```
---
## Tech Stack
| Layer | Technology |
|-------|------------|
| Frontend | React 19, Vite 7 |
| Styling | Tailwind CSS 3.4 |
| Backend | Express 5, Prisma 6 |
| Database | SQLite |
| Desktop | Tauri 2 |
| Testing | Vitest, React Testing Library (939 tests, 75%+ coverage) |
| CI/CD | GitHub Actions |
---
## License
[PolyForm Noncommercial 1.0.0](LICENSE) -- DLSLabs