Skip to main content

Building a Custom Application

🚧 This guide is under construction 🚧

Learn how to build a custom application using the Boards backend and frontend packages.

Overview

Instead of using Baseboards or cloning the full repository, you can build your own custom application by installing the Boards packages directly:

  • @weirdfingers/boards (npm) - React hooks and frontend utilities
  • boards (PyPI, coming soon) - Python backend SDK

This approach gives you:

  • Full customization - Build your own UI and UX
  • Minimal dependencies - Only include what you need
  • Framework flexibility - Use with Remix, Vite, or any React setup
  • Production packages - Stable, versioned releases

What's Coming

This guide will cover:

  1. Backend Setup

    • Installing the boards Python package
    • Configuring database and storage
    • Setting up GraphQL API
    • Running workers for job processing
  2. Frontend Setup

    • Installing @weirdfingers/boards npm package
    • Configuring the GraphQL client
    • Using React hooks for boards, artifacts, and generators
    • Building custom UI components
  3. Authentication

    • Integrating auth providers (Supabase, Clerk, Auth0)
    • Configuring multi-tenancy
    • Setting up authorization rules
  4. Deployment

    • Containerizing your custom app
    • Deploying to cloud providers
    • Configuring production settings

Current Status

Backend Package (PyPI): 🚧 In development

  • The backend will be published as a pip-installable package
  • Currently, you need to clone the repository to use the backend

Frontend Package (npm): ✅ Available

  • @weirdfingers/boards is published and ready to use
  • Documentation for standalone usage is being finalized

Alternatives While This Guide is in Development

Option 1: Install Baseboards

For the quickest start, use Baseboards:

npx @weirdfingers/baseboards up my-app

Then customize the generated code. See the Baseboards Installation Guide.

Option 2: Clone the Repository

For full access to the source code:

git clone https://github.com/weirdfingers/boards.git
cd boards
make install

See the Repository Cloning Guide.

Option 3: Use Frontend Package Only (Experimental)

You can install the frontend package now and connect it to a Baseboards backend:

# Install the frontend package
npm install @weirdfingers/boards

# Or with pnpm
pnpm add @weirdfingers/boards

Example usage:

import { BoardsProvider, useBoards, useBoard } from '@weirdfingers/boards';

function App() {
return (
<BoardsProvider graphqlUrl="http://localhost:8088/graphql">
<BoardsList />
</BoardsProvider>
);
}

function BoardsList() {
const { boards, loading, error } = useBoards();

if (loading) return <div>Loading...</div>;
if (error) return <div>Error: {error.message}</div>;

return (
<div>
{boards.map(board => (
<div key={board.id}>{board.title}</div>
))}
</div>
);
}

Note: You still need a backend running (via Baseboards or cloned repository) to provide the GraphQL API.

Prerequisites (When Available)

When this guide is complete, you'll need:

  • Docker and Docker Compose - For database and Redis
  • Node.js 18+ - For frontend development
  • Python 3.12+ - For backend development
  • PostgreSQL - Database (via Docker or external)
  • Redis - Job queue (via Docker or external)

Stay Updated

This guide is actively being developed. Follow progress:

Contributing

Want to help write this guide? Contributions are welcome!

  1. Check the Contributing Guide
  2. Join the discussion on Discord
  3. Open an issue or PR on GitHub

Resources

While this guide is being written, these resources may help:

Example: Minimal Custom Setup (Preview)

Here's a preview of what the setup might look like when this guide is complete:

Backend

# Install backend package (coming soon)
pip install boards

# Create main.py
cat > main.py << 'EOF'
from boards import create_app
from boards.config import Config

config = Config(
database_url="postgresql://user:pass@localhost/boards",
redis_url="redis://localhost:6379",
storage_provider="local",
)

app = create_app(config)

if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8088)
EOF

# Run
python main.py

Frontend

# Install frontend package
npm install @weirdfingers/boards urql graphql

# Create App.tsx
cat > App.tsx << 'EOF'
import { BoardsProvider, useBoards } from '@weirdfingers/boards';

export default function App() {
return (
<BoardsProvider graphqlUrl="http://localhost:8088/graphql">
<MyBoardsApp />
</BoardsProvider>
);
}

function MyBoardsApp() {
const { boards } = useBoards();
return (
<div>
<h1>My Custom Boards App</h1>
{boards.map(board => (
<div key={board.id}>{board.title}</div>
))}
</div>
);
}
EOF

Note: This is a simplified preview. The actual implementation will include proper configuration, error handling, and more features.


Check back soon for the complete guide! 🚀