Skip to main content

A modern, brutalist-designed static site generator for link bio pages

Project description

LinkBioSite

Python Version PyPI Version License: MIT Jinja2 GitHub stars GitHub forks

A modern, brutalist-designed static site generator for creating beautiful link bio pages. Built with Python and Jinja2 templates, featuring 2026 design trends with cosmic midnight color palettes and experimental layouts.

✨ Features

  • 🎨 2026 Brutalist Design: Raw edges, asymmetrical layouts, and bold typography
  • 🌙 Cosmic midnight color palette with high contrast
  • 🚀 Built with Python and Jinja2 templating
  • 📱 Mobile-friendly responsive layout
  • 🐳 Static site generation for fast hosting
  • 📊 Analytics integration ready
  • 🔍 SEO optimized with meta tags
  • Motion Design: Subtle animations and interactive hovers
  • Accessibility: Reduced motion support
  • 🛠️ Library API: Use as a Python library or CLI tool
  • 🐳 Docker Support: Multi-stage builds for development and production

🚀 Quick Start

Installation

Install LinkBioSite using pip:

pip install linkbiosite

Or install from source for development:

git clone https://github.com/rafnixg/links.git
cd links
pip install -e .

Create Your First Link Bio

  1. Initialize a new project:
linkbiosite init my-bio
cd my-bio
  1. Edit data.json with your information:
{
  "bio": {
    "name": "Your Name",
    "greeting": "Hi, I'm Your Name",
    "subtitle": "Your awesome subtitle",
    "handle": "@yourhandle",
    "avatar": "/avatar.png",
    "avatar_alt": "YN"
  },
  "links": {
    "Social": [
      {"text": "Website", "tag": "globe", "url": "https://example.com"},
      {"text": "Twitter", "tag": "twitter", "url": "https://twitter.com/yourhandle"}
    ]
  }
}
  1. Build your site:
linkbiosite build
  1. Serve locally for development:
linkbiosite serve

Your link bio will be available at http://localhost:8000

💻 Usage

Command Line Interface

LinkBioSite provides a comprehensive CLI for all operations:

# Initialize a new project
linkbiosite init [directory]

# Build the static site
linkbiosite build [--output OUTPUT_DIR]

# Serve locally for development
linkbiosite serve [--port PORT] [--host HOST]

# Show help
linkbiosite --help

Python API

Use LinkBioSite as a Python library:

from linkbiosite import build, init, serve

# Initialize a new project
init("my-bio-project")

# Build the site
output_dir = build()

# Serve for development
serve(port=8000)

Advanced Usage

from linkbiosite import LinkBioSiteGenerator

# Create a custom generator
generator = LinkBioSiteGenerator(project_root="/path/to/project")

# Build with custom output directory
output_path = generator.build_site(output_dir="/custom/output")

# Load and validate data
data = generator.load_data()
generator.validate_data(data)

🐳 Docker Usage

Development

Build and run the development container:

# Build development image
docker build --target runtime -t linkbio:dev .

# Run with volume mounting
docker run -it --rm \
  -v $(pwd):/app/project \
  -v $(pwd)/public:/app/output \
  -p 8000:8000 \
  linkbiosite:dev \
  linkbiosite serve --host 0.0.0.0

Production

Build and run the production container:

# Build production image
docker build --target production -t linkbiosite:prod .

# Run nginx server
docker run -d -p 80:80 linkbiosite:prod

📁 Project Structure

When you initialize a new LinkBioSite project, you'll get:

my-bio/
├── data.json          # Site configuration and content
├── templates/         # Jinja2 templates
│   ├── index.html     # Main page template
│   └── styles.css     # CSS styles
├── assets/            # Static assets (images, etc.)
└── public/            # Generated site (after build)

🛠️ Technologies

  • Language: Python 3.8+
  • Templating: Jinja2 3.0+
  • Styling: CSS3 with brutalist design
  • Containerization: Docker with multi-stage builds
  • Package Management: Modern Python packaging (pyproject.toml)

📖 Configuration

data.json Structure

{
  "bio": {
    "name": "Your Name",
    "greeting": "Welcome message",
    "subtitle": "Your subtitle",
    "handle": "@yourhandle",
    "avatar": "/path/to/avatar.png",
    "avatar_alt": "Alt text for avatar"
  },
  "links": {
    "Category Name": [
      {
        "text": "Link Text",
        "tag": "icon-name",
        "url": "https://example.com"
      }
    ]
  },
  "footer": {
    "copyright": "© {year} Your Name. All rights reserved."
  },
  "analytics": {},
  "meta": {
    "title": "Page Title",
    "description": "Page description for SEO"
  }
}

Custom Templates

LinkBio uses Jinja2 templates. Customize templates/index.html and templates/styles.css to match your design needs.

👤 Author

Rafnix Guzmán

🤝 Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add some amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

📝 License

This project is licensed under the MIT License - see the LICENSE file for details.

⭐ Show your support

Give a ⭐️ if this project helped you!

📚 Documentation

For detailed documentation, visit linkbio.readthedocs.io (coming soon).

🙏 Acknowledgments

  • Inspired by 2026 design trends
  • Built with modern Python packaging
  • Thanks to the Jinja2 and Python communities```
  1. Install dependencies:
pip install -r requirements.txt

💻 Usage

Building the Site

To generate the static site:

python build.py

The generated site will be in the public/ directory.

Development Mode

Run the application in development mode with hot reload:

reflex run

The application will be available at:

Export Static Files

Export the public files to the public folder:

./public_export

Production Mode

Run the application in production mode:

reflex run --env prod

🐳 Docker Deployment

Build and run the application using Docker:

# Build the Docker image
docker build -t reflex-links:latest .

# Run the container
docker run -d -p 8000:8000 -p 3000:3000 --name links reflex-links:latest

Access the application at http://localhost:3000

📁 Project Structure

links/
├── link_bio/           # Main application code
│   ├── components/     # Reusable UI components
│   ├── styles/         # CSS styles and theme
│   ├── views/          # Page views (header, footer, links)
│   └── link_bio.py     # Main application file
├── assets/             # Static assets (images, icons)
├── public/             # Public files
├── requirements.txt    # Python dependencies
├── rxconfig.py         # Reflex configuration
└── Dockerfile          # Docker configuration

🛠️ Technologies

  • Static Site Generator: Custom Python/Jinja2 SSG
  • Language: Python 3.11+
  • Templating: Jinja2 3.1.2
  • Styling: CSS3 with animations and brutalist design
  • Analytics: Umami Analytics
  • Containerization: Docker

👤 Author

Rafnix Guzmán

🤝 Contributing

Contributions, issues, and feature requests are welcome! Feel free to check the issues page.

📝 License

This project is open source and available for personal and commercial use.

⭐ Show your support

Give a ⭐️ if this project helped you!

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

linkbiosite-3.0.0.tar.gz (20.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

linkbiosite-3.0.0-py3-none-any.whl (16.7 kB view details)

Uploaded Python 3

File details

Details for the file linkbiosite-3.0.0.tar.gz.

File metadata

  • Download URL: linkbiosite-3.0.0.tar.gz
  • Upload date:
  • Size: 20.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for linkbiosite-3.0.0.tar.gz
Algorithm Hash digest
SHA256 c85f71901070353115a26431635e0ad741a69f01535f8d682d432e937b132656
MD5 b5c1c721d48cb844be8bba5931de108a
BLAKE2b-256 7dd65222d2fdefd06896f8e646b7fdc2363d616e2d00c93980aab26caad4eb75

See more details on using hashes here.

File details

Details for the file linkbiosite-3.0.0-py3-none-any.whl.

File metadata

  • Download URL: linkbiosite-3.0.0-py3-none-any.whl
  • Upload date:
  • Size: 16.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.2

File hashes

Hashes for linkbiosite-3.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 32e7a54700cdf6371e9c6e41fb9f58c06917192b0955d98029ada12f1f626014
MD5 c6ae52e7ee601edef64b71d40c45861d
BLAKE2b-256 785a303526d5084b39c4fc3d2dfaa00e05c58268ac2837686a8be077ac2df6f7

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page