Loading repository data…
Loading repository data…
amborle / repository
The simple and open source user story mapping tool.
Featmap is a user story mapping tool for product people to build, plan and communicate product backlogs.
Featmap is an open source user story mapping tool. It is built using React, TypeScript and Go.
Featmap was built for product people to take advantage of a technique called user story mapping. User story mapping, or just story mapping, is an effective tool to create, plan and communicate your product backlog. Story mapping was created by Jeff Patton and its primary utility is providing us with an overview of the entire product and how user goals are broken down into a series of tasks. Finally, it helps us to define valuable product slices (releases) and prioritize between them.
Featmap is great for product managers, product owners or just about anyone who is building products. Featmap can also be used as a lightweight work item management system for development teams.
There are many user story mapping tools, however none are really focused on ease-of-use and simplicity. Featmap was built to fill that gap. We hope you will find it as useful as we found building it.
Featmap can be run on your own server.
Download the Featmap binary for your platform from the releases page. Make it executable if needed.
Featmap reads configuration from environment variables. A conf.json file in the working directory is also supported as a fallback.
Environment variables:
| Variable | Description | Required |
|---|---|---|
DATABASE_URL | PostgreSQL connection string | Yes |
JWT_SECRET | Secret key for JWT token signing | Yes |
PORT | HTTP port (default: 5000) | No |
APP_SITE_URL | Public URL of the app | No |
ENVIRONMENT | Set to development for non-HTTPS cookie support | No |
MODE | Set to hosted if running as a hosted service | No |
EMAIL_FROM | Sender address for invitation/password emails | No |
SMTP_SERVER | SMTP server hostname | No |
SMTP_PORT | SMTP port (default: 587) | No |
SMTP_USER | SMTP username | No |
SMTP_PASS | SMTP password | No |
conf.json fallback (optional):
{
"appSiteURL": "https://localhost:5000",
"dbConnectionString": "postgresql://postgres:postgres@localhost:5432/featmap?sslmode=disable",
"jwtSecret": "ChangeMeForProduction",
"port": "5000",
"emailFrom": "",
"smtpServer": "",
"smtpPort": "587",
"smtpUser": "",
"smtpPass": "",
"environment": "development"
}
Environment variables take precedence over conf.json. Values not set in either will use defaults where applicable.
./featmap
Open http://localhost:5000 in your browser.
Download the latest release and replace the binary. Back up your database before upgrading.
git clone https://github.com/amborle/featmap.git
cd featmap
cp config/conf.json .
# Build and run
make build
./bin/featmap
cp config/.env .
docker-compose build
docker-compose up -d
The project uses a Makefile for common tasks.
| Target | Description |
|---|---|
make | Build the Go binary (includes webapp build via go:embed) |
make webapp | Build the frontend SPA |
make dev | Build webapp and run the server |
make test | Run Go tests |
make e2e | Run Playwright end-to-end tests |
make vet | Run go vet |
make clean | Remove build artifacts |
make release | Cross-compile for darwin/linux/windows |
make docker-build | Build Docker image |
make docker-up | Start docker-compose services |
Backend (Go):
log/slogGET /v1/healthgo:embedFrontend (TypeScript + React):
Go tests -- API integration tests + middleware unit tests + validation tests:
make test
Playwright e2e tests -- browser-based tests with mocked API:
make e2e
See LICENSE.