A customer-facing product roadmap tool that integrates with AHA! and uses AI to generate customer-friendly summaries of product initiatives.
- Customer View: Clean, professional roadmap display with 4 columns (Done, Now, Next, Explore)
- Admin Dashboard: Manage initiatives, sync from AHA!, and edit AI-generated summaries
- AHA! Integration: Manual sync to pull latest product data
- Dual AI Support: Choose between OneAdvanced AI or Gemini 3 Pro for summarization
- Customizable: Add custom tags and timelines to each initiative
- Secure: Password-protected admin area with JWT authentication
- OneAdvanced Branding: Professional design with orange accent colors and Montserrat font
Backend:
- Node.js with Express
- PostgreSQL database
- JWT authentication
- AHA! API integration
- AI summarization (OneAdvanced AI / Gemini)
Frontend:
- React 18
- Tailwind CSS
- React Router
- Vite
- Node.js 18+ and npm
- PostgreSQL 12+
- AHA! API credentials
- AI API keys (OneAdvanced AI and/or Gemini)
cd now-next-later
# Install backend dependencies
npm install
# Install frontend dependencies
cd client
npm install
cd ..Create a new PostgreSQL database:
createdb roadmap_dbOr using psql:
CREATE DATABASE roadmap_db;Copy the example environment file:
cp .env.example .envEdit .env with your configuration:
# Server Configuration
PORT=3000
NODE_ENV=development
# Database Configuration
DATABASE_URL=postgresql://username:password@localhost:5432/roadmap_db
# Admin Configuration
ADMIN_PASSWORD=your-secure-password
JWT_SECRET=your-jwt-secret-key-minimum-32-characters
# AHA! API Configuration
AHA_API_URL=https://your-domain.aha.io/api/v1
AHA_API_KEY=your-aha-api-key
AHA_PRODUCT_ID=your-product-id
# AI Summarization APIs
ONEADVANCED_AI_URL=https://your-oneadvanced-ai-endpoint
ONEADVANCED_AI_KEY=your-oneadvanced-ai-key
GEMINI_API_KEY=your-gemini-api-key
# Default AI Provider (oneadvanced or gemini)
DEFAULT_AI_PROVIDER=oneadvancedImportant Security Notes:
- Use a strong password for
ADMIN_PASSWORD - Generate a secure random string for
JWT_SECRET(at least 32 characters) - Never commit your
.envfile to version control
node server/db/migrate.jsThis will create all necessary tables and initial configuration.
Development Mode (both frontend and backend):
npm run devThis starts:
- Backend API on http://localhost:3000
- Frontend dev server on http://localhost:5173
Production Mode:
# Build the frontend
npm run build
# Start the server
npm startThe production server will serve both the API and the built frontend on port 3000.
Navigate to http://localhost:5173 (dev) or http://localhost:3000 (production)
The customer view displays all visible initiatives organized in 4 columns:
- Done: Completed features
- Now: Currently in development
- Next: Planned for near future
- Explore: Under consideration
Each initiative shows:
- Title
- Customer-friendly description
- Custom tags
- Timeline/month
- Click "Admin" in the top right corner
- Login with your admin password (from
.env) - Access admin features:
- Sync from AHA!: Manually refresh data from AHA! and generate AI summaries
- Edit Initiatives: Click "Edit" on any card to modify details
- AI Provider: Switch between OneAdvanced AI and Gemini
- Preview: Toggle between admin and customer views
- Visibility Control: Show/hide initiatives from customers
- Log into the admin dashboard
- Click "Sync from AHA!" button
- The system will:
- Fetch latest initiatives from AHA!
- Generate AI summaries using your selected provider
- Update the database
- Display a success message with the number of synced items
- In admin view, click "Edit" on any initiative card
- Modify:
- Customer-Facing Summary: What customers see (required)
- Internal Description: Admin-only notes
- Custom Tags: Add/remove tags for categorization
- Timeline: Display month/quarter information
- Column: Move between Done/Now/Next/Explore
- Visibility: Toggle customer visibility
- Click "Save Changes" or "Delete" to remove
GET /api/health- Health checkGET /api/initiatives- Get all visible initiativesPOST /api/auth/login- Admin login
GET /api/initiatives/admin- Get all initiatives (including hidden)GET /api/initiatives/:id- Get single initiativePUT /api/initiatives/:id- Update initiativeDELETE /api/initiatives/:id- Delete initiativePOST /api/sync/refresh- Sync from AHA!GET /api/sync/history- Get sync historyGET /api/config- Get configurationPUT /api/config- Update configuration
id- Primary keyaha_id- Unique AHA! identifiertitle- Initiative titledescription- Internal descriptionai_summary- Customer-facing summarycustom_tags- Array of tagstimeline- Display timelinecolumn_name- Column (done/now/next/explore)sort_order- Display orderis_visible- Customer visibilityraw_aha_data- Original AHA! data (JSONB)created_at,updated_at- Timestamps
id- Primary keyconfig_key- Configuration keyconfig_value- Configuration valueupdated_at- Timestamp
id- Primary keysync_status- Status (success/failed)sync_message- Messageinitiatives_synced- Countsynced_at- Timestampsynced_by- User
The OneAdvanced branding is configured in client/tailwind.config.js:
colors: {
'oneadvanced': {
DEFAULT: '#e9510e',
// ... color variations
}
}To customize, update the color values and restart the dev server.
The system maps AHA! workflow statuses to columns in server/services/ahaService.js:
mapWorkflowStatusToColumn(status) {
// Customize based on your AHA! workflow
if (statusLower.includes('shipped')) return 'done';
if (statusLower.includes('in progress')) return 'now';
// ...
}Modify the AI summarization prompts in server/services/aiService.js to adjust the tone and style of generated summaries.
Ensure PostgreSQL is running:
pg_ctl statusCheck your DATABASE_URL in .env matches your PostgreSQL configuration.
- Verify your AHA! credentials in
.env - Check the sync logs: Navigate to admin dashboard and check console
- Ensure your AHA! product ID is correct
- Verify API permissions in AHA!
- Check API keys are valid
- Verify endpoint URLs
- Check API rate limits
- Review error messages in server console
- Verify
ADMIN_PASSWORDin.env - Check
JWT_SECRETis set (minimum 32 characters) - Clear localStorage in browser and try again
- Set
NODE_ENV=productionin your.env - Build the frontend:
npm run build - Set up PostgreSQL with proper security
- Use environment variables (not
.envfile) on production server - Set up SSL/HTTPS
- Use a process manager like PM2:
npm install -g pm2
pm2 start server/index.js --name roadmap-app
pm2 save- Always use HTTPS in production
- Keep API keys secure and never commit them
- Use strong passwords and JWT secrets
- Regularly update dependencies
- Set up database backups
- Monitor API rate limits
- Implement IP whitelisting if needed
For issues or questions:
- Check the troubleshooting section
- Review server logs for detailed error messages
- Verify all environment variables are correctly set
MIT