Skip to content

Repository files navigation

Devcase CMS

Headless CMS for developer portfolios — an admin panel and public REST API that powers Devcase Web.

License: PolyForm Shield

This repository is public and source available, not open source under OSI terms. You may view, learn from, and contribute to the code, but you may not offer a competing product or resell it as a service. See License.

Overview

Devcase CMS separates content management from presentation:

LayerRole
Admin panel (admin/)Nuxt 4 SPA for editors — manage pages, projects, solutions, technologies, media, and users
Admin API (/api/v1/admin/*)Authenticated CRUD, file uploads, cache revalidation
Public API (/api/v1/*)Headless content delivery for frontends — pages, projects, bootstrap data, sitemap

Content is stored as structured JSON (blocks, metadata) in PostgreSQL and served to decoupled frontends.

Companion Frontend

This CMS and its APIs are ready to work withDevcase Web — a portfolio site for developers to showcase their projects, powered by the public headless API (/api/v1/*).

PieceRepositoryRole
CMS & APIsdevcase-cms (this repo)Admin panel, content storage, public & admin APIs
Frontenddevcase-webDeveloper portfolio site — pages, projects, bootstrap data, sitemap

Run the CMS locally (or point at production), configure the web app with your API base URL, and the two repos work together out of the box.

Tech Stack

LayerTechnology
FrontendNuxt 4, Vue 3, Nuxt UI, Tailwind CSS 4, Pinia, VueUse, i18n (pt-BR)
BackendExpress 5, Node.js, TypeScript, JWT auth
DatabasePostgreSQL 17, Prisma ORM 7
Dev ToolsDocker Compose, Makefile, Mailpit, ESLint, Prettier

Content Types

EntityDescription
PagesSite pages with slug, JSON content, and blocks
ProjectsPortfolio entries with technologies and solutions
SolutionsService/solution catalog items
TechnologiesTech stack tags linked to projects
FilesMedia library (images served from /static)

Project Structure

devcase-cms/
├── admin/ # Nuxt 4 admin panel (SPA)
├── server/ # Express API
│ ├── prisma/ # Schema & migrations
│ └── src/
│ ├── admin/ # Authenticated admin routes, controllers, services
│ ├── web/ # Public headless API (pages, projects, sitemap)
│ ├── errors/ # Custom HTTP errors
│ ├── generated/ # Prisma generated client
│ ├── types/ # Shared TypeScript types
│ └── utils/ # Helpers (pagination, tokens, logger, etc.)
├── docker-compose.yml # Postgres, Mailpit, Redis
├── server.Dockerfile # Multi-stage production build
└── Makefile # Dev & DB shortcuts

API Routes

Base path: /api/v1 (configurable via API_BASE_PATH).

Public (headless)

MethodPathDescription
GET/bootstrapSite menu / bootstrap data
GET/pages/:slugPage by slug
GET/projects/:slugProject by slug
GET/sitemapSitemap entries
GET/healthHealth check
GET/static/images/*Uploaded media

Admin (JWT required)

PrefixResources
/authLogin, register, token refresh
/admin/pagePages CRUD
/admin/projectProjects CRUD
/admin/solutionSolutions CRUD
/admin/technologyTechnologies CRUD
/admin/fileMedia uploads
/admin/userUser management
/admin/revalidateTrigger frontend ISR revalidation

Getting Started

Prerequisites

  • Node.js 24+
  • Docker & Docker Compose
  • npm

Setup

# Clone the repo
git clone git@github.com:lucassimines/devcase-cms.git
# Start Postgres, Mailpit, Redis
make up
# Install dependencies
npm install
cd server && npm install &&cd ..
cd admin && npm install &&cd ..
# Copy env files and adjust as needed
cp server/.env.example server/.env
cp admin/.env.example admin/.env
# Run migrations & seedcd server
npx prisma migrate dev
npx prisma db seed
cd ..

Run

# Start everything (Docker + both dev servers)
make run
# Or individually
make dev-server # Express API only (port 8080)
make dev-admin # Nuxt admin panel only (port 3000)

Makefile Commands

CommandDescription
make runStart Docker + both dev servers
make upStart Docker services
make devRun both dev servers concurrently
make dev-serverRun Express API only
make dev-adminRun Nuxt frontend only
make downStop Docker services
make cleanStop Docker + remove volumes
make prisma-studioOpen Prisma Studio
make prisma-seedSeed the database
make prisma-migrateRun Prisma migrations
make prisma-resetWipe local public schema
make db-import-prodImport production data (schema from migrations)
make db-dumpDump local Postgres to backups/

Production Infrastructure

ServiceProvider
DatabasePrisma.io
API ServerRender
Frontenddevcase-web (Vercel)

License

Copyright © 2025–2026 Lucas Simines. All rights reserved.

Licensed under the PolyForm Shield License 1.0.0.

You may

  • View, clone, and study the source code
  • Run it locally for learning, evaluation, or contributing
  • Submit pull requests and improvements

You may not (without written permission)

  • Offer a product or service that competes with Devcase CMS
  • Resell, white-label, or sublicense this software as a commercial product

Commercial licensing

For commercial use or a separate license agreement, open an issue on GitHub or contact the maintainer directly.

Full terms: LICENSE

About

Headless CMS for developer portfolios | Admin panel and public REST API that powers devcase-web.

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages