Dr Jskill logo

Dr Jskill

Community
jdubois
dr-jskill

Creates Java + Spring Boot projects: Web applications, full-stack apps with Vue.js or Angular or React or vanilla JS, PostgreSQL, REST APIs, and Docker. Use when creating Spring Boot projects, setting up Java microservices, or building enterprise applications with the Spring Framework.

Overview

Publisherjdubois
Repositorydr-jskill
Skill namedr-jskill
Stars
344
Forks
58
Bundled files
84
LicenseApache-2.0
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 84 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by jdubois on GitHub. Read the source before you install it.

Installation

Install the Dr Jskill AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
    https://github.com/jdubois/dr-jskill/tree/main
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/jdubois/dr-jskill.git \
  .claude/skills/dr-jskill
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Dr Jskill in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Dr Jskill on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Dr Jskill is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Spring Boot skill that follows Julien Dubois' best practices.

Overview

This agent skill helps you create Spring Boot projects following Julien Dubois' best practices. It provides tools and scripts to quickly bootstrap Spring Boot applications using https://start.spring.io.

Recommended model: Dr JSkill works best with GPT-5.5.

Version Management

Centralized versions live in versions.json. All scripts read from it via scripts/lib/versions.mjs (JavaScript). Update this file to bump Java, Spring Boot fallback, Postgres, Node/npm, Testcontainers, etc.

Prerequisites

  1. Java 25 installed
  2. Node.js 24.x and NPM 11.x (for front-end development)
  3. Docker installed and running

Capabilities

  • Generate Spring Boot projects with predefined configurations
  • Support for various Spring Boot versions and dependencies
  • Follow best practices for project structure and configuration
  • Quick setup scripts for common use cases
  • Docker support for containerized deployments
  • Front-end development with multiple framework options:
    • Vue.js 3 (default) - Progressive framework with Composition API
    • React 19 - Popular library for building user interfaces
    • Angular 22 - Full-featured framework with TypeScript
    • Vanilla JavaScript - No framework, pure ES6+ with Vite

Usage

Using the Scripts

This skill includes cross-platform JavaScript (Node.js) scripts in the scripts/ directory that can be used to download pre-configured Spring Boot projects from start.spring.io. They work on Linux, macOS, and Windows.

Unified launcher (cross-platform):

bash
node scripts/create-project my-app com.myco my-app com.myco.myapp 25 fullstack --output-dir /absolute/path/to/user/workspace

Direct invocation:

bash
node scripts/create-project-latest.mjs my-app com.myco my-app com.myco.myapp 25 fullstack --output-dir /absolute/path/to/user/workspace

Flags supported:

  • --boot-version <x.y.z> / -BootVersion: override Spring Boot version
  • --project-type basic|web|fullstack / -ProjectType
  • --output-dir <absolute-path>: create the generated project folder under this directory

Output directory rule (important for Agent Skills): bundled scripts are run from the skill directory root. When the user asks to create an app, pass --output-dir with the user's current working directory from the agent session so the generated project folder is created in the user's workspace, not inside the dr-jskill skill folder. Only omit --output-dir when running Dr JSkill's own tests, where generating inside the skill checkout is intentional.

Tip: The create-project-latest script auto-resolves preferred Boot 4.x and falls back to the configured springBootFallback if 4.x is not yet available. Override with --boot-version if needed.

Latest Version Project ⭐

Use the create-project-latest.mjs script to create a project with the latest Spring Boot version (automatically fetched):

bash
node scripts/create-project-latest.mjs my-app com.mycompany my-app com.mycompany.myapp 25 web

Project types available:

  • basic - Minimal Spring Boot project
  • web - Web application with REST API capabilities
  • fullstack - Complete application with database and security

Basic Spring Boot Project

Use the create-basic-project.mjs script to create a basic Spring Boot project with essential dependencies:

bash
node scripts/create-basic-project.mjs

Web Application

Use the create-web-project.mjs script to create a Spring Boot web application with web dependencies:

bash
node scripts/create-web-project.mjs

Full-Stack Application

Use the create-fullstack-project.mjs script to create a comprehensive Spring Boot application with database, security, and web dependencies:

bash
node scripts/create-fullstack-project.mjs

Best Practices

When creating Spring Boot projects:

  1. Use the latest Spring Boot version (currently 4.x) - the create-project-latest.mjs script automatically fetches it
  2. Review Spring Boot 4 critical considerations: See Spring Boot 4 Migration Guide for Jackson 3 annotations and TestContainers configuration
  3. Include Spring Boot Actuator for production-ready features
  4. Use Spring Data JPA for database access
  5. Use PostgreSQL for database - see Database Best Practices for optimization
  6. Use properties files for configuration - see Configuration Best Practices
  7. Set up foundational dotfiles: .gitignore, .env.sample, .editorconfig, .gitattributes, .dockerignore, optional .vscode/, .devcontainer/ - see Project Setup & Dotfiles
    • The .env file is the canonical location for local secrets; instruct users to copy .env.sample → .env and fill in real values
    • NEVER read or expose .env: it contains real secrets — do not cat, view, or print its contents; only .env.sample (placeholder values) may be read or displayed
  8. Follow daily Git best practices for small branches, reviewed diffs, safe commits, pull requests, and worktrees - see Git Best Practices
  9. Use spring-boot-docker-compose for automatic database startup during development - see Docker Guide
  10. Follow RESTful API design principles
  11. Configure proper logging with Logback - see Logging Best Practices
  12. Use Maven for dependency management
  13. Include Spring Boot DevTools for development productivity
  14. Add Spring Security only when needed - see Security Guide for best practices
  15. Configure Docker for containerized deployments - see Docker Guide
  16. Enable GraalVM native image support for faster startup - see GraalVM Guide
  17. Always ship a startup banner that prints access URLs when the app is ready - see Startup Banner
  18. The user must review changes before they are committed to git. Ask the user before initializing a Git repository, or running git commands.

Java Code Intelligence (JDTLS) ⭐

Generated projects integrate with the Eclipse JDT Language Server (JDTLS) so AI agents can navigate, refactor, and diagnose Java code semantically rather than with text search. The scripts ship a .github/lsp.json that wires JDTLS into GitHub Copilot CLI automatically.

For the AI agent: when working on Java files, prefer the lsp tool over grep/view/sed. It understands imports, generics, inheritance, and Javadoc.

TaskUse
Find where a class/method is definedlsp goToDefinition
Find callers before changing a signaturelsp findReferences or incomingCalls
Look up types, parameters, Javadoclsp hover
List symbols in a filelsp documentSymbol
Search a class/method across the projectlsp workspaceSymbol
Rename safely across fileslsp rename (never sed)
Check compile errors before ./mvnw verifyide-get_diagnostics

Preference order for Java work: lsp → grep with .java glob → view.

Install JDTLS once: brew install jdtls (or see JDTLS guide for other platforms). Full setup, gotchas, and editor integrations live in references/JDTLS.md.

Project Structure

The service layer is only included if it adds value (e.g. complex business logic). For simple CRUD applications, the controller can directly call the repository.

Generated projects follow the following recommended structure:

plaintext
my-spring-boot-app/
├── .gitignore                 # Java + front-end + secrets (see references/PROJECT-SETUP.md)
├── .env.sample                # Template for local env vars; .env is gitignored
├── .editorconfig              # Consistent formatting across IDEs
├── .gitattributes             # Normalize line endings, better diffs
├── .dockerignore              # Slim Docker build contexts
├── .vscode/                   # Optional editor recommendations
│   ├── extensions.json
│   └── settings.json
├── .devcontainer/             # Optional Dev Container (Java 25 + Node 24 + PostgreSQL)
│   ├── devcontainer.json
│   └── docker-compose.yml
├── src/
│   ├── main/
│   │   ├── java/
│   │   │   └── com/example/app/
│   │   │       ├── Application.java
│   │   │       ├── config/
│   │   │       ├── controller/
│   │   │       ├── service/         # Only included if needed
│   │   │       ├── repository/
│   │   │       └── domain/
│   │   └── resources/
│   │       ├── static/              # Front-end web assets (HTML, CSS, JS)
│   │       │   ├── index.html
│   │       │   ├── css/
│   │       │   │   └── styles.css
│   │       │   ├── js/
│   │       │   │   └── app.js
│   │       │   └── images/
│   │       └── application.properties
│   └── test/
│       └── java/
│           └── com/example/app/
│               ├── config/
│               ├── controller/
│               ├── service/         # Only included if needed
│               ├── repository/
│               └── domain/
├── Dockerfile                   # JVM image (jlink runtime + distroless)
├── Dockerfile-aot               # JVM + Spring AOT image
├── Dockerfile-native            # GraalVM native image
├── Dockerfile-crac              # CRaC (fast-restore) image
├── checkpoint-and-run.sh        # CRaC entrypoint helper
├── compose.yaml                 # Dev database (spring-boot-docker-compose)
├── docker-compose.yml           # Full stack with PostgreSQL (JVM)
├── docker-compose-aot.yml       # Full stack with PostgreSQL (AOT)
├── docker-compose-native.yml    # Full stack with PostgreSQL (native)
├── docker-compose-crac.yml      # CRaC app (database-free)
├── pom.xml
└── README.md

Dependencies

Generated projects include: Spring Web, Spring Data JPA, Spring Boot Actuator, DevTools, PostgreSQL, Validation, Docker Compose support, Test Starter with JUnit 5, and TestContainers.

Configuration

Use .properties files (not YAML), externalize secrets via environment variables, and leverage @ConfigurationProperties for type safety. See the Configuration Guide for profiles, secrets management, and common patterns.

The .env file is the single local secret store — never read or print it; only .env.sample (placeholder values) may be shown.

For database optimization, see the Database Best Practices Guide.

Security (Optional)

Spring Security is optional - only add it when you need authentication or authorization. See the Security Guide for JWT, OAuth2, role-based access, and CORS configuration.

Testing

See the Testing Guide for unit tests (Mockito, @WebMvcTest), integration tests (TestContainers + @ServiceConnection), and Given-When-Then patterns with AssertJ.

Front-End Development

Choose a front-end framework:

All options include: Vite/CLI dev server with hot reload, Bootstrap 5.3+, SPA routing, and automatic build into the Spring Boot JAR.

When wiring the frontend-maven-plugin, bind the Node install, npm install, and npm run build executions to the generate-resources phase. This makes ./mvnw spring-boot:run build the frontend before Spring Boot starts, instead of only building it during explicit package-oriented commands.

Non-interactive scaffolding (important for CI and AI agents). Two separate prompts must be silenced:

  1. npm's own "Ok to proceed?" install prompt — silence by placing -y before the package name (flags after -- go to the scaffolder, not to npm). Use npm create -y vite@latest … or npx --yes create-vite@latest ….
  2. The scaffolder's own prompts — create-vite 9.x and Angular CLI 22 still pose interactive questions (e.g. "Use rolldown-vite?", analytics opt-in) that -y / --yes do not silence. The reliable fix is to close stdin: pipe echo | into the command so the scaffolder immediately sees EOF and accepts defaults.

Canonical recipes:

  • React / Vanilla: echo | npx --yes create-vite@latest frontend --template react (or --template vanilla)
  • Vue: npm create -y vue@latest frontend -- --router --pinia --vitest --eslint --prettier (create-vue does not pose extra prompts)
  • Angular: echo | npx --yes @angular/cli@22 new frontend --style=css --ssr=false --skip-git --defaults --skip-install, then npm install

Vue: normalize before the first npm install (required). create-vue scaffolds oxlint and eslint-plugin-oxlint pinned to mismatched minors, so npm install fails with an ERESOLVE peer conflict — which fails the frontend-maven-plugin step and therefore the whole Maven build. Immediately after scaffolding, run:

bash
# Run from the Dr JSkill skill directory (that is where `scripts/` lives),
# passing the path to the generated project's frontend/ directory.
node scripts/normalize-vue-frontend.mjs /absolute/path/to/my-app/frontend

It drops the oxlint dual-linter, leaving the single ESLint pipeline, and adds the lint:check script that create-vue never emits but the Maven frontend-maven-plugin build runs. It is idempotent, and --check reports without writing. See Vue.js Guide.

Vitest + callback Vite config. If vite.config.js exports defineConfig(({ mode }) => ...), do not let the generated vitest.config.js call mergeConfig(viteConfig, ...). Resolve the callback first with viteConfig({ mode: 'test', command: 'serve' }); otherwise Vitest fails with Cannot merge config in form of callback. See Vue.js Guide.

Docker Deployment

Spring Boot automatically manages Docker containers during development via spring-boot-docker-compose. For production, pick one of the four provided images: Dockerfile (JVM, jlink + distroless), Dockerfile-aot (JVM + Spring AOT), Dockerfile-native (GraalVM native), or Dockerfile-crac (CRaC fast-restore). See the Docker Guide for full setup, the matching Maven profiles, and deployment patterns.

GraalVM Native Images

Build native images via Docker (no local GraalVM needed) or locally with ./mvnw -Pnative -DskipTests package native:compile. See the GraalVM Guide for configuration, runtime hints, testing, and CI/CD integration.

Azure Deployment

Deploy to Azure Container Apps with an optional VNET-injected Azure Database for PostgreSQL Flexible Server. Uses GitHub Container Registry (GHCR) for image storage (pushed via GITHUB_TOKEN in CI, pulled by Container Apps using a stored PAT) and Container Apps secrets for the DB password — no secrets in source, env dumps, or shell history. Includes a GitHub Actions OIDC workflow, and supports both the JVM and GraalVM native image variants. See the Azure Deployment Guide.

Validation

#WhatCommand
1Build backend./mvnw clean install
2Unit tests./mvnw test
3Integration tests./mvnw verify (uses Testcontainers 2 + @ServiceConnection)
4Front-end dev servercd frontend && npm run dev

Run validation steps first. If anything fails, fix before proceeding.

Once the project is generated, go through the steps above to ensure that the generated project is fully functional and follows best practices. If any validation step fails, try to identify the issue and fix it before proceeding. This ensures that the generated project is of high quality and ready for development.

Additional Resources

Included Reference Guides

Core Spring Boot:

Data and Persistence:

Security (Optional):

  • Security Guide - Spring Security, JWT, OAuth2, authentication patterns

Testing:

  • Testing Guide - Unit and integration testing with TestContainers

Front-End Development:

Project Setup:

  • Project Setup & Dotfiles - .gitignore, .env.sample, .editorconfig, .gitattributes, .dockerignore, .devcontainer/
  • Git Best Practices - daily Git workflow, branches, commits, pull requests, safe undo, stashing, and worktrees

Deployment:

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

and 24 more files.

Frequently asked questions

What does the Dr Jskill AI skill do?

Creates Java + Spring Boot projects: Web applications, full-stack apps with Vue.js or Angular or React or vanilla JS, PostgreSQL, REST APIs, and Docker. Use when creating Spring Boot projects, setting up Java microservices, or building enterprise applications with the Spring Framework.

Why use Dr Jskill on TypingMind?

Because you install it once and use it with any model. Dr Jskill is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Dr Jskill in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/jdubois/dr-jskill/tree/main. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Dr Jskill?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Dr Jskill?

As many as you like. As long as a model supports skills, you can use Dr Jskill with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Dr Jskill AI skill free?

Yes. It is published on GitHub by jdubois under the Apache-2.0 license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇