Skip to main content

App Blueprint

The app blueprint ({app}.app.json) is the master document for your Radish application. It defines high-level metadata, audience, workflows, features, and entity overview. Other blueprints (types, roles) derive their content from it.

Structure

{
"version": 1,
"app": { },
"audience": { },
"workflows": [ ],
"categories": [ ],
"style": { },
"features": { },
"entityOverview": { },
"accessPatterns": { },
"database": { }
}

Only version and app (with name and description) are required. All other sections are optional.

Sections

app (required)

Core application identity.

{
"app": {
"name": "Library",
"displayName": "Library Management System",
"description": "A comprehensive library system for managing books, authors, members, and loans with full catalog search and lending workflows",
"version": "0.1.0",
"domain": "education",
"tags": ["library", "books", "lending", "catalog"]
}
}
FieldRequiredDescription
nameYesApplication identifier (PascalCase or camelCase, 1-100 chars)
displayNameNoHuman-readable name for UI
descriptionYesRich description of purpose and functionality (1-2000 chars). Write detailed descriptions — this drives downstream generation.
versionNoSemantic version (x.y.z)
domainNoBusiness domain (e.g., education, e-commerce, healthcare)
tagsNoSearchable categorization tags

audience

Define user personas to guide permission design and UI decisions.

{
"audience": {
"primary": "Library patrons searching and borrowing books",
"secondary": "Librarians managing catalog, processing loans, and helping patrons",
"admin": "System administrators managing users, roles, and system settings"
}
}

workflows

Key user journeys that define how people interact with the application.

{
"workflows": [
{
"name": "Borrow Book",
"actor": "patron",
"description": "Patron searches catalog, selects available book, requests loan. Librarian reviews and approves. System records due date and updates availability."
},
{
"name": "Return Book",
"actor": "librarian",
"description": "Librarian scans returned book, system closes loan, updates availability, calculates any late fees."
}
]
}

Each workflow requires name and description. The actor field identifies which user persona performs the workflow.

categories

Optional content categorization for organizing entities or content.

{
"categories": [
{
"name": "Fiction",
"subcategories": ["Literary", "Science Fiction", "Mystery", "Romance"]
},
{
"name": "Non-Fiction",
"subcategories": ["History", "Science", "Biography"]
}
]
}

style

Branding hints for UI generation.

{
"style": {
"theme": "radish-admin",
"tone": "professional",
"palette": "warm earth tones",
"typography": "clean sans-serif",
"layout": "sidebar navigation with content area",
"icons": "outline style",
"imagery": "minimal, functional"
}
}

All fields are optional free-text strings that guide UI layer generation.

features

Boolean flags indicating which platform features to enable.

{
"features": {
"auth": true,
"roles": true,
"adminPanel": true,
"api": true,
"search": true,
"pagination": true,
"fileUploads": false,
"notifications": false,
"analytics": false,
"scheduling": false,
"logging": true
}
}
FeatureDescription
authAuthentication system (login, registration, JWT)
rolesRole-based access control
adminPanelAdministrative panel
apiREST API endpoints
searchFull-text search functionality
paginationPaginated list responses
fileUploadsFile upload capability
notificationsNotification system
analyticsAnalytics and reporting
schedulingCalendar/scheduling features
loggingApplication logging

entityOverview

High-level entity groupings by domain concern. This is not where you define fields — that's the types blueprint. This section provides a conceptual map of your data model.

{
"entityOverview": {
"catalog": [
{ "Book": "Books in the library catalog. Owned by system." },
{ "Author": "Book authors with biographical information." },
{ "Category": "Book categories and genres." }
],
"lending": [
{ "Loan": "Active book loans tracked by member and due date." },
{ "Reservation": "Book hold requests from members." }
],
"membership": [
{ "Member": "Library members with borrowing privileges." }
]
}
}

Entity names should be PascalCase. Don't include built-in entities (User, Profile, Role, Permission, ApiKey, Setting) — these are generated automatically.

accessPatterns

Define who can do what at each access level.

{
"accessPatterns": {
"public": ["Browse catalog", "Search books", "View author profiles"],
"authenticated": ["Borrow books", "View own loans", "Place reservations"],
"librarian": ["Manage catalog", "Process loans", "Manage members"],
"admin": ["Manage users", "Configure system", "View reports"]
}
}

database

Database engine configuration.

{
"database": {
"type": "mongodb",
"name": "library"
}
}

Supported types: mongodb, postgresql, mysql.

Complete Example

{
"version": 1,
"app": {
"name": "Library",
"displayName": "Library Management System",
"description": "A comprehensive library management system for tracking books, authors, members, and lending operations. Supports catalog browsing, book borrowing, and administrative functions.",
"version": "0.1.0",
"domain": "education",
"tags": ["library", "books", "lending"]
},
"audience": {
"primary": "Library patrons searching and borrowing books",
"secondary": "Librarians managing catalog and processing loans",
"admin": "System administrators managing users and settings"
},
"workflows": [
{
"name": "Browse and Borrow",
"actor": "patron",
"description": "Patron searches catalog by title or author, views book details, requests loan if available"
},
{
"name": "Process Returns",
"actor": "librarian",
"description": "Librarian receives returned book, marks loan complete, updates availability"
}
],
"features": {
"auth": true,
"roles": true,
"adminPanel": true,
"api": true,
"search": true,
"pagination": true,
"fileUploads": false,
"notifications": true,
"analytics": false,
"scheduling": false,
"logging": true
},
"entityOverview": {
"catalog": [
{ "Book": "Books in the library catalog. Owned by system." },
{ "Author": "Book authors with biographical info." }
],
"lending": [
{ "Loan": "Active book loans tracked by member and due date." }
]
},
"accessPatterns": {
"public": ["Browse catalog", "Search books"],
"authenticated": ["Borrow books", "View own loans"],
"admin": ["Manage catalog", "Manage members", "Override loans"]
},
"database": {
"type": "mongodb",
"name": "library"
}
}

Best Practices

Write Rich Descriptions

The app.description field drives downstream generation. Be specific about what the application does, who uses it, and why.

{
"description": "A comprehensive library management system for tracking books, authors, members, and lending operations. Supports catalog browsing with full-text search, book borrowing with due date tracking, and administrative functions including member management and overdue notifications."
}

Define Specific Workflows

Workflows should describe real user journeys, not abstract operations.

{
"workflows": [
{
"name": "Borrow Book",
"actor": "patron",
"description": "Patron searches catalog, selects available book, requests loan. Librarian reviews and approves. System records due date and updates availability."
}
]
}

Group Entities by Domain

Use meaningful domain group names in entityOverview to organize your data model conceptually.

Don't Duplicate Other Blueprints

The app blueprint is for high-level intent. Don't define:

  • Individual entity fields (that's types.json)
  • Routes or API endpoints (generated automatically)
  • Specific permissions (that's roles.json)
  • Implementation details

Next Steps