# Adding Content
FolderWeb turns your folder structure into a website. That's not marketing speak—it's literally how it works. Let's explore what that means in practice.
## The Basic Idea
```
content/
├── about.md → yoursite.com/about/
├── blog/
│ └── index.md → yoursite.com/blog/
└── contact.html → yoursite.com/contact/
```
Every file becomes a page. Every folder becomes a URL path. No configuration required.
## File Types
FolderWeb recognizes three content types:
### Markdown (`.md`)
The bread and butter of content creation. Write in Markdown, get HTML.
```markdown
# My Page Title
This is a paragraph with **bold** and *italic* text.
- Lists work
- And so do [links](https://example.com)
## Subheading
More content here.
```
FolderWeb uses [Parsedown](https://parsedown.org/) to convert Markdown to HTML, with caching for performance.
### HTML (`.html`)
When you need more control or already have HTML:
```html
My Page
This is plain HTML.
Whatever you want.
```
### PHP (`.php`)
For dynamic content:
```php
Copyright {$currentYear}";
?>
Latest Posts
{$post}";
}
?>
```
**Important:** PHP files are executed, so be careful with user input and security.
## Folder Structure as URL Structure
Your folder hierarchy determines your URLs:
```
content/
├── index.md → /
├── about.md → /about/
├── blog/
│ ├── index.md → /blog/
│ ├── 2024-12-15-first-post/
│ │ └── index.md → /blog/first-post/
│ └── 2024-12-20-second-post/
│ └── index.md → /blog/second-post/
└── projects/
├── index.md → /projects/
└── my-project/
└── index.md → /projects/my-project/
```
**Key points:**
- Folder names become URL slugs
- Date prefixes (`YYYY-MM-DD-`) are stripped from URLs but preserved for sorting
- Trailing slashes are enforced (FolderWeb redirects `/about` → `/about/`)
## Multiple Files in One Page
You can combine multiple content files in a single directory. They render in **alphabetical order**:
```
content/portfolio/
├── 00-hero.php # Renders first
├── 01-intro.md # Renders second
├── 02-gallery.html # Renders third
└── 03-contact.md # Renders last
```
All four files render as one page at `/portfolio/`.
**Use case:** Build pages from modular components—header, content, footer, etc.
## Dates in Folder Names
FolderWeb automatically extracts dates from folder names:
```
content/blog/
├── 2024-12-15-my-first-post/ # Date: December 15, 2024
├── 2024-12-20-another-post/ # Date: December 20, 2024
└── 2025-01-01-new-year-post/ # Date: January 1, 2025
```
The date format is `YYYY-MM-DD-` and it's **stripped from the URL**:
- Folder: `2024-12-15-my-first-post`
- URL: `/blog/my-first-post/`
- Date: Extracted and available in templates
Dates are automatically formatted based on your language (e.g., "15. desember 2024" in Norwegian).
## Adding Assets (Images, Files)
Drop assets directly in your content folders:
```
content/blog/my-post/
├── index.md
├── cover.jpg # Cover image (automatic)
├── diagram.png # Referenced in content
└── styles.css # Page-specific styles
```
**Reference in Markdown:**
```markdown

```
**Cover images:** Name your cover image `cover.jpg`, `cover.png`, or `cover.webp`. FolderWeb automatically uses it in list views and social media meta tags.
## Metadata Files
Add a `metadata.ini` file to configure pages:
```
content/blog/my-post/
├── index.md
└── metadata.ini
```
**Basic metadata:**
```ini
title = "My Awesome Post"
summary = "A short description for list views"
date = "2024-12-15"
```
**More options:**
```ini
title = "My Post"
summary = "Short description"
date = "2024-12-15"
search_description = "SEO-friendly description for search engines"
menu = 1 # Show in navigation menu
menu_order = 10 # Menu position (lower = first)
[settings]
show_date = true # Display date on page
hide_list = false # Don't show list view even if subdirectories exist
```
See the [Metadata Reference](#) for all available options.
## List Views vs. Page Views
FolderWeb automatically decides whether to show a **list** or a **page**:
**List view** (directory has subdirectories):
```
content/blog/
├── index.md # Intro content
├── metadata.ini # List configuration
├── 2024-12-15-first-post/
└── 2024-12-20-second-post/
```
Result: `/blog/` shows a list of posts with the intro content at the top.
**Page view** (directory has only files):
```
content/about/
└── index.md
```
Result: `/about/` shows just the page content.
**Override:** Use `hide_list = true` in `metadata.ini` to force page view even with subdirectories.
## Custom URL Slugs
Don't like your folder name as the URL? Override it with metadata:
```ini
slug = "custom-url-path"
```
**Example:**
```
content/blog/2024-12-15-very-long-title-that-i-regret/
└── metadata.ini
```
```ini
slug = "short-title"
```
URL becomes `/blog/short-title/` instead of `/blog/very-long-title-that-i-regret/`.
## Navigation Menus
Add pages to the navigation menu with metadata:
```ini
title = "About Us"
menu = 1 # Show in menu
menu_order = 20 # Position (lower numbers first)
```
Menu items are sorted by `menu_order`, then alphabetically by title.
## Practical Examples
### Simple Blog Post
```
content/blog/2024-12-15-my-first-post/
├── index.md
├── cover.jpg
└── metadata.ini
```
**index.md:**
```markdown
# My First Post
This is my blog post content.

```
**metadata.ini:**
```ini
title = "My First Post"
summary = "An introduction to my blog"
```
### Multi-Section Page
```
content/services/
├── 00-hero.php
├── 01-intro.md
├── 02-pricing.html
└── metadata.ini
```
All files render together as one page at `/services/`.
### Documentation Site
```
content/docs/
├── index.md
├── getting-started/
│ └── index.md
├── tutorial/
│ ├── index.md
│ ├── basics.md
│ └── advanced.md
└── reference/
└── index.md
```
Creates a hierarchical documentation structure with automatic list views.
## What's Next?
Now that you know how to add content, learn how to:
- **[Customize styling](#)** — Make it look like your own
- **[Create templates](#)** — Control how content is presented
- **[Add multilingual support](#)** — Reach a global audience
Or jump to the [Reference](#) for detailed documentation on metadata, templates, and configuration.