ProjectPal: Dev Context Hub
ProjectPal: Dev Context Hub
Centralize project commands, env vars, and links for faster development and onboarding.
Solo developers and small teams frequently struggle with context switching and onboarding new members (or themselves after a break). Information crucial for project setup and daily development β specific `npm` scripts, `docker-compose` commands, local environment variables, important API keys, local server URLs, and troubleshooting notes β is scattered across `package.json`, `README.md` files, `.env` files, personal notes, and chat logs. This leads to 15-30 minutes wasted per context switch, resulting in 6-12 hours lost weekly for active developers. For small teams, onboarding a new developer can take days just to get their local environment running correctly, costing significant time and hindering productivity. Existing solutions often focus on code snippets or general documentation, lacking the interactive, structured, and executable nature required for active project development context.
ProjectPal provides a centralized, interactive web dashboard and a complementary CLI tool for managing all project-specific development context. Users can create 'Projects' within 'Organizations' and populate them with: 1) **Commands**: executable scripts with aliases (e.g., `dev:start`, `test:e2e`) that can be copied or run directly via the CLI; 2) **Environment Variables**: key-value pairs, allowing for templates or actual values, easily copied to `.env` files; and 3) **Links**: important URLs like documentation, deployed apps, or design files. The web interface offers a clean, intuitive way to manage this data, while the CLI allows developers to quickly fetch and execute context (e.g., `pp run dev:start <project-slug>`, `pp env <project-slug>`). Projects can be shared with team members with granular 'viewer' or 'editor' roles, drastically reducing onboarding time and ensuring development knowledge is always accessible and up-to-date. This unique combination of structured data, web UI, and CLI integration sets ProjectPal apart from generic knowledge bases or snippet managers.
Tech Stack
System Architecture
βββββββββββββββ βββββββββββββ ββββββββββββββββββββββββββ
β Browser/CLI ββββββββββΆβ Next.js ββββββββββΆβ Supabase β
β β β (Vercel) β β (PostgreSQL, Auth, RLS)β
βββββββββββββββ β β ββββββββββββββββββββββββββ
β API Routesβ
βββββββ¬ββββββ
β
βββββββββββββββββ΄ββββββββββββββββ
β β
βΌ βΌ
βββββββββββ βββββββββββ
β Stripe β β Resend β
β (Billing)β β (Emails)β
βββββββββββ βββββββββββDatabase Schema
CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
CREATE TABLE users (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
email TEXT UNIQUE NOT NULL,
display_name TEXT,
avatar_url TEXT,
supabase_id UUID UNIQUE NOT NULL, -- Link to Supabase auth.users.id
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
COMMENT ON TABLE users IS 'Application users, linked to Supabase auth.';
CREATE TABLE organizations (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
name TEXT NOT NULL,
slug TEXT UNIQUE NOT NULL, -- For friendly URLs
owner_id UUID REFERENCES users(id) ON DELETE SET NULL,
stripe_customer_id TEXT, -- Stripe customer ID for billing
subscription_status TEXT, -- e.g., 'active', 'inactive', 'trialing'
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
COMMENT ON TABLE organizations IS 'Teams or companies using ProjectPal.';
CREATE TABLE projects (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
org_id UUID REFERENCES organizations(id) ON DELETE CASCADE NOT NULL,
name TEXT NOT NULL,
description TEXT,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_projects_org_id ON projects(org_id);
COMMENT ON TABLE projects IS 'Individual projects managed within an organization.';
CREATE TYPE project_role AS ENUM ('viewer', 'editor', 'admin');
CREATE TABLE project_members (
project_id UUID REFERENCES projects(id) ON DELETE CASCADE NOT NULL,
user_id UUID REFERENCES users(id) ON DELETE CASCADE NOT NULL,
role project_role DEFAULT 'viewer' NOT NULL,
created_at TIMESTAMPTZ DEFAULT now(),
PRIMARY KEY (project_id, user_id)
);
CREATE INDEX idx_project_members_user_id ON project_members(user_id);
COMMENT ON TABLE project_members IS 'Defines which users have access to which projects and their roles.';
CREATE TABLE commands (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
project_id UUID REFERENCES projects(id) ON DELETE CASCADE NOT NULL,
alias TEXT NOT NULL, -- e.g., "dev", "test", "build"
command_string TEXT NOT NULL, -- e.g., "npm run dev", "docker-compose up"
description TEXT,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now(),
UNIQUE (project_id, alias) -- Ensure unique aliases per project
);
CREATE INDEX idx_commands_project_id ON commands(project_id);
COMMENT ON TABLE commands IS 'Project-specific commands/scripts.';
CREATE TABLE environment_variables (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
project_id UUID REFERENCES projects(id) ON DELETE CASCADE NOT NULL,
key TEXT NOT NULL,
value TEXT, -- Can be a placeholder like "{{STRIPE_SECRET_KEY}}" or actual value
description TEXT,
is_secret BOOLEAN DEFAULT FALSE, -- Placeholder for UI, not actual secret management
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now(),
UNIQUE (project_id, key)
);
CREATE INDEX idx_env_vars_project_id ON environment_variables(project_id);
COMMENT ON TABLE environment_variables IS 'Project-specific environment variable templates or values.';
CREATE TABLE project_links (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
project_id UUID REFERENCES projects(id) ON DELETE CASCADE NOT NULL,
name TEXT NOT NULL,
url TEXT NOT NULL,
description TEXT,
created_at TIMESTAMPTZ DEFAULT now(),
updated_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_project_links_project_id ON project_links(project_id);
COMMENT ON TABLE project_links IS 'Important links related to the project (docs, deployments, etc.).';
CREATE TABLE cli_tokens (
id UUID PRIMARY KEY DEFAULT uuid_generate_v4(),
user_id UUID REFERENCES users(id) ON DELETE CASCADE NOT NULL,
token_hash TEXT UNIQUE NOT NULL, -- Hashed token, never store plain text
name TEXT, -- e.g., "My Laptop", "CI Server"
last_used_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT now()
);
CREATE INDEX idx_cli_tokens_user_id ON cli_tokens(user_id);
COMMENT ON TABLE cli_tokens IS 'API tokens for CLI access, stored as hashes.';API Endpoints
/api/userGet current user profile/api/organizationsCreate a new organization/api/organizationsList all organizations for the user/api/organizations/:orgIdGet details for a specific organization/api/organizations/:orgIdUpdate an organization/api/organizations/:orgIdDelete an organization/api/organizations/:orgId/projectsCreate a new project within an organization/api/organizations/:orgId/projectsList projects for an organization/api/projects/:projectIdGet details for a specific project/api/projects/:projectIdUpdate a project/api/projects/:projectIdDelete a project/api/projects/:projectId/membersAdd a member to a project/api/projects/:projectId/members/:userIdUpdate a member's role in a project/api/projects/:projectId/members/:userIdRemove a member from a project/api/projects/:projectId/commandsList commands for a project/api/projects/:projectId/commandsAdd a new command to a project/api/commands/:commandIdUpdate a specific command/api/commands/:commandIdDelete a specific command/api/projects/:projectId/env-varsList environment variables for a project/api/projects/:projectId/env-varsAdd a new environment variable to a project/api/env-vars/:envVarIdUpdate a specific environment variable/api/env-vars/:envVarIdDelete a specific environment variable/api/projects/:projectId/linksList links for a project/api/projects/:projectId/linksAdd a new link to a project/api/links/:linkIdUpdate a specific link/api/links/:linkIdDelete a specific link/api/cli/tokensGenerate a new CLI API token for the current user/api/cli/tokensList CLI API tokens for the current user/api/cli/tokens/:tokenIdRevoke a CLI API token/api/cli/projects/:projectSlug/contextRetrieve all commands, env vars, and links for a project by slug (for CLI usage)Start Building with AI
Copy this prompt for Cursor, v0, Bolt, or any AI coding assistant
BuilderDaily Team
VerifiedIndie hackers and full-stack engineers creating validated Micro-SaaS blueprints with production-ready tech stacks.
Related Blueprints
More Micro-SaaS ideas you might like to build
LLM TestForge
Intelligent test data generation for robust LLM applications.
HyperFocus Dev
Block distractions, track deep work, and reclaim your coding flow.
API CostPilot
Real-time API expense tracking, forecasting, and optimization for developers.
Gap Alert
Today's gap expires in ~14 hours
Get tomorrow's blueprint delivered to your inbox so you never miss a profitable idea.
(Email delivery launching soon β sign up to be first!)