# Getting Started with TufteCMS
*Build your first content-driven website*
TufteCMS transforms markdown files into a rich, interconnected digital garden. This guide walks through setting up your first site.
> **Note**: TufteCMS is experimental software. Features and APIs may change as the framework evolves.
## Installation
TufteCMS requires Python 3.8+ and uses Flask as its web framework.
```bash
# Clone or download TufteCMS
git clone https://github.com/user/tuftecms.git
cd tuftecms
# Install dependencies (using uv recommended)
uv sync
# Or with pip
pip install flask mistune
```
## Project Structure
Create your content directory structure:
```
your-site/
├── data/ # All your content
│ ├── index.md # Homepage
│ ├── essays/ # Blog posts
│ │ ├── index.md # Essays landing page
│ │ └── 2025-01-01-first-post.md
│ └── docs/ # Documentation
├── tuftecms/ # Framework (if not installed as package)
└── engine.py # Development server
```
## Homepage Template
TufteCMS uses a template-based homepage. Copy the starter template:
```bash
# Copy the starter homepage template
cp tuftecms/templates/homepage-starter.html tuftecms/templates/homepage.html
```
Then customize `tuftecms/templates/homepage.html` to reflect your unique voice and vision. The starter template provides:
- Basic layout structure
- Sample content sections
- Integration with TufteCMS index counts
- Responsive design elements
- Example of pathway boxes for content organization
## Your First Content
Create content pages in the `data/` directory:
```markdown
# data/essays/welcome.md
# Welcome to My Digital Garden
This is my first essay. TufteCMS will automatically serve this at `/essays/welcome`.
I can link to [other pages](/docs) and they'll be tracked in the connections system.
## About This Site
Built with [TufteCMS](/docs) - a framework for contemplative digital publishing.
```
## Development Server
Start the development server:
```bash
# Using uv (recommended)
uv run python engine.py
# Or directly with Python
python engine.py
```
Visit `http://localhost:5000` to see your site.
## Writing Content
### Basic Markdown
TufteCMS supports standard markdown with enhancements:
```markdown
# Main Heading
## Section Heading
Regular paragraph with *emphasis* and **strong** text.
- Bullet points
- Are supported
- Naturally
1. As are
2. Numbered lists
> Blockquotes are tracked in the quotes index
Code blocks work as expected:
```python
def hello_world():
return "Hello from TufteCMS!"
```
### Content Structure
TufteCMS automatically extracts metadata from your content:
```markdown
# Your Content Title
*January 2025*
This becomes the page title automatically. TufteCMS extracts titles from H1 headings and dates from italic date patterns or filenames.
```
**What gets extracted automatically:**
- H1 headings (`# Title`) become page titles
- Italic date patterns (`*January 2025*`) become publication dates
- Filename dates (`2025-01-15-post.md`) are recognized for chronological sorting
- Word count and reading time calculated automatically
### Internal Linking
Link between pages using clean URLs:
```markdown
Check out my [latest essay](/essays/programming-philosophy).
See the [complete documentation](/docs) for more details.
```
TufteCMS automatically:
- Tracks these connections
- Builds backlink indexes
- Creates network visualizations
- Generates related content suggestions
## Adding Sidenotes
Sidenotes provide non-disruptive way to add depth:
```markdown
This is the main narrative flow.This appears in the margin without disrupting the reading flow. The text continues naturally.
```
**Critical formatting notes:**
- Sidenotes must be inline with no line breaks
- Place them at the end of sentences (after the period)
- Keep them away from code blocks
- Use descriptive IDs like `sn-technique-name`
## Directory Organization
Organize content logically:
```
data/
├── index.md # Homepage
├── essays/ # Long-form writing
│ ├── index.md # Essays index page
│ ├── 2025-01-01-introduction.md
│ └── 2025-01-15-philosophy.md
├── notes/ # Shorter observations
│ ├── index.md
│ └── daily-thoughts.md
├── projects/ # Work portfolio
│ ├── index.md
│ └── tuftecms.md
└── docs/ # Documentation
├── index.md
└── getting-started.md
```
URLs automatically follow this structure:
- `/essays/introduction` → `data/essays/introduction.md`
- `/projects/tuftecms` → `data/projects/tuftecms.md`
- `/notes` → `data/notes/index.md`
## Content Discovery Features
TufteCMS automatically provides:
### Indexes
- **Archive**: Chronological listing of all content
- **Connections**: Cross-reference mapping between pages
- **Sidenotes**: All marginal annotations across the site
- **Quotes**: Blockquotes extracted from content
- **Terms**: Key concepts with occurrence tracking
### Navigation
- **Search**: Full-text search across all content
- **Graph**: Interactive visualization of content connections
- **Random**: Serendipitous content discovery
- **Related**: Algorithm-suggested related content
## Next Steps
Now that you have a basic site running:
1. **Organize your content** - Learn about [content structure](/docs/content-structure) for optimal file organization
2. **Add depth with sidenotes** - Master [Tufte-style annotations](/docs/sidenotes) for contemplative writing
3. **Customize your site** - Explore [customization options](/docs/customization) for templates and styling
4. **Deploy to production** - Follow the [deployment guide](/docs/deployment) for hosting options
### Related Documentation
- **[Content Structure](/docs/content-structure)** - Essential reading for organizing larger sites
- **[Sidenotes Guide](/docs/sidenotes)** - Learn TufteCMS's signature feature for adding depth
- **[Customization Guide](/docs/customization)** - Make the framework reflect your unique vision
- **[Documentation Index](/docs)** - Complete overview of all guides and features
---
*Remember: TufteCMS optimizes for human reading time over writing time. Every feature serves the goal of making your content more discoverable, connected, and contemplative.*