{"id":46231606,"url":"https://github.com/mojoaar/podium","last_synced_at":"2026-03-03T18:01:23.994Z","repository":{"id":322303706,"uuid":"1088910402","full_name":"mojoaar/podium","owner":"mojoaar","description":"Golang application for a website/blog using Gin as the webserver.","archived":false,"fork":false,"pushed_at":"2025-11-03T18:33:54.000Z","size":1665,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-11-03T19:30:09.290Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mojoaar.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-03T16:15:18.000Z","updated_at":"2025-11-03T18:33:57.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/mojoaar/podium","commit_stats":null,"previous_names":["mojoaar/podium"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/mojoaar/podium","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mojoaar%2Fpodium","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mojoaar%2Fpodium/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mojoaar%2Fpodium/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mojoaar%2Fpodium/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mojoaar","download_url":"https://codeload.github.com/mojoaar/podium/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mojoaar%2Fpodium/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30053986,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-03T17:46:22.538Z","status":"ssl_error","status_checked_at":"2026-03-03T17:46:22.036Z","response_time":61,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-03-03T18:01:21.911Z","updated_at":"2026-03-03T18:01:23.988Z","avatar_url":"https://github.com/mojoaar.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Podium\n\nA lightweight Go web application for hosting your website with blog posts and static pages, all written in Markdown.\n\n## Screenshots\n\n![Podium Home Page](podium_1.png)\n_Clean, responsive design with dark/light theme toggle_\n\n![Blog Posts List](podium_2.png)\n_Blog posts with excerpts, tags, and reading time estimates_\n\n![Individual Post](podium_3.png)\n_Individual blog post with syntax highlighting and share buttons_\n\n![Mobile View](podium_4.png)\n_Mobile-responsive design with touch-friendly navigation_\n\n## Features\n\n- 🚀 Built with Go and the Gin web framework\n- 📝 Write blog posts in Markdown\n- 📄 Create static pages in Markdown\n- 🔄 Automatic navigation generation - new static pages automatically appear in the menu\n- 🎨 Clean, responsive design with **dark/light theme toggle**\n- ❌ **Custom error pages** with helpful 404 and 500 error handling\n- ⚡ Fast and lightweight with **HTTP caching**, **lazy-loaded images**, and **asset minification**\n- �️ **Image optimization** with automatic resizing and quality optimization\n- �🔧 **Cross-platform system service support** (Windows, macOS, Linux)\n- 🏷️ **Tags support** for blog posts with automatic filtering\n- 💻 **Syntax highlighting** for code blocks (140+ languages via highlight.js)\n- 📅 **Date timestamps** for blog posts with newest-first sorting\n- ⭐ **Featured posts** - Pin important posts to the top of the blog list\n- 📆 **Post scheduling** - Publish posts automatically at future dates/times\n- 📄 **Draft support** - hide posts and pages until ready to publish\n- 🔖 **Post excerpts** on list pages with configurable length\n- ⏱️ **Reading time estimates** for blog posts\n- 📱 **Mobile-responsive design** with touch-friendly navigation\n- 🖨️ **Print-friendly CSS** for clean article printing\n- 📡 **RSS/Atom feed** for blog subscribers\n- 🗺️ **Sitemap.xml** with automatic post/page indexing\n- 📄 **Pagination** for long post lists\n- 🔗 **Share buttons** for social media (Twitter, LinkedIn, Facebook, Reddit)\n- 📋 **Copy code button** for easy code snippet copying\n- 🌐 **Social media icons** in footer (Twitter, Bluesky, LinkedIn, GitHub, Reddit, Facebook)\n- 📊 **Umami analytics** support for privacy-focused website tracking\n- ⚙️ **YAML configuration** for easy customization\n- 🔥 **Config hot reload** - Configuration changes apply instantly without restart\n- 🔄 **Hot reload** in development mode for faster iteration\n\n## Project Structure\n\n```\npodium/\n├── main.go                  # Main application with service support\n├── go.mod                   # Go module file\n├── go.sum                   # Go dependencies checksums\n├── Makefile                 # Build and service management commands\n├── build.sh                 # Build script for Linux/macOS\n├── build.bat                # Build script for Windows\n├── README.md                # This file\n├── SERVICE.md               # Detailed service documentation\n├── SERVICE-FEATURES.md      # Service features overview\n├── QUICKREF.md              # Quick reference guide\n├── .gitignore               # Git ignore file\n│\n├── install-service.sh       # Linux/macOS service installer\n├── uninstall-service.sh     # Linux/macOS service uninstaller\n├── install-service.bat      # Windows service installer\n├── uninstall-service.bat    # Windows service uninstaller\n│\n├── bin/                     # Build output directory\n│   └── .gitkeep             # Keeps directory in git\n│\n├── posts/                   # Blog posts (Markdown files)\n│   ├── first-post.md\n│   └── golang-web-dev.md\n│\n├── static/                  # Static pages (Markdown files)\n│   ├── about.md\n│   └── contact.md\n│\n├── templates/               # HTML templates\n│   ├── index.html           # Home page\n│   ├── page.html            # Static page template\n│   ├── posts.html           # Blog posts list\n│   ├── post.html            # Individual post template\n│   └── error.html           # Error page\n│\n└── assets/                  # Static assets (CSS, images, etc.)\n    ├── style.css            # Main stylesheet\n    ├── theme-toggle.js      # Theme switching functionality\n    ├── share-buttons.js     # Social share functionality\n    └── favicon.svg          # Site icon\n```\n\n## Getting Started\n\n### Prerequisites\n\n- Go 1.16 or higher\n\n### Installation\n\n1. Clone or navigate to the repository\n2. Install dependencies:\n\n```bash\ngo mod download\n```\n\n### Configuration\n\nPodium uses a `config.yaml` file to configure your site. Create a `config.yaml` file in the root directory with the following settings:\n\n```yaml\n# Site Settings\nsite_title: \"Podium\"\nsite_description: \"A simple and elegant blogging platform\"\nsite_author: \"Morten Johansen\"\nsite_author_url: \"https://johansen.foo\"\nsite_url: \"http://localhost:8080\"\nhome_intro: \"Podium is a lightweight web application built with Go and the Gin framework. It supports markdown-based blog posts and static pages that automatically appear in the navigation when added.\"\nshow_quick_links: true\ndisable_landing_page: false\n\n# Server Settings\nport: 8080\n\n# Pagination\nposts_per_page: 10\n\n# RSS Feed\nfeed_items: 20\n\n# Excerpts\nexcerpt_length: 200\n\n# Social Media Links\nshow_social_links: true\nsocial_twitter: \"\"\nsocial_bluesky: \"\"\nsocial_linkedin: \"\"\nsocial_github: \"\"\nsocial_reddit: \"\"\nsocial_facebook: \"\"\n\n# Analytics\numami_script_url: \"\" # e.g., \"https://analytics.yourdomain.com/script.js\"\numami_website_id: \"\" # Your Umami website ID\n\n# Paths (relative to application root)\nposts_folder: \"posts\"\nstatic_folder: \"static\"\ntemplates_folder: \"templates\"\nassets_folder: \"assets\"\n```\n\n**Configuration Options:**\n\n- `site_title` - The name of your website (appears in navigation and page titles)\n- `site_description` - A brief description of your site (used in meta tags and homepage)\n- `site_author` - Your name (appears in footer)\n- `site_author_url` - Optional URL to link your name in the footer (e.g., personal website)\n- `site_url` - Full URL of your site (used in RSS feed and sitemap)\n- `home_intro` - Introduction text displayed on the homepage (appears in the About section)\n- `show_quick_links` - Toggle Quick Links section on homepage (true/false, default: true)\n- `disable_landing_page` - If true, shows blog list directly on index instead of landing page and hides \"Posts\" menu link (true/false, default: false)\n- `port` - The port number the server will run on (default: 8080)\n- `posts_per_page` - Number of posts to show per page (default: 10)\n- `feed_items` - Number of items to include in RSS feed (default: 20)\n- `excerpt_length` - Maximum characters for post excerpts (default: 200)\n- `show_social_links` - Toggle social media icons in footer (true/false, default: false)\n- `social_twitter` - Twitter/X profile URL (e.g., \"https://twitter.com/yourusername\")\n- `social_bluesky` - Bluesky profile URL (e.g., \"https://bsky.app/profile/yourusername\")\n- `social_linkedin` - LinkedIn profile URL (e.g., \"https://linkedin.com/in/yourusername\")\n- `social_github` - GitHub profile URL (e.g., \"https://github.com/yourusername\")\n- `social_reddit` - Reddit profile URL (e.g., \"https://reddit.com/user/yourusername\")\n- `social_facebook` - Facebook profile URL (e.g., \"https://facebook.com/yourusername\")\n- `umami_script_url` - Umami analytics script URL (e.g., \"https://analytics.yourdomain.com/script.js\")\n- `umami_website_id` - Your Umami website ID for tracking\n- `posts_folder` - Directory containing blog posts (default: \"posts\")\n- `static_folder` - Directory containing static pages (default: \"static\")\n- `templates_folder` - Directory containing HTML templates (default: \"templates\")\n- `assets_folder` - Directory containing CSS/images/etc (default: \"assets\")\n\n**Note:** If `config.yaml` is not found, Podium will use default values. Only social media icons with configured URLs will be displayed.\n\n### Running the Application\n\nStart the server:\n\n```bash\n# Production mode\ngo run main.go\n\n# Development mode with hot reload\ngo run main.go -dev\n```\n\nThe application will start on `http://localhost:8080`\n\n**Development Mode Features:**\n\n- **Hot reload** - Automatically reloads templates and config when files change\n- **Debug logging** - More verbose output for troubleshooting\n- **No caching** - Fresh content on every request for easier development\n\n**Configuration Hot Reload:**\n\nIn both development and production modes, Podium watches `config.yaml` for changes. When you update the configuration file (e.g., add a new social media link, change site title, etc.), the changes are automatically applied within ~500ms without requiring a server restart. This works even when running as a system service!\n\n## Running Podium\n\nYou can run Podium in two ways: **directly from the terminal** or **as a system service**.\n\n### Running Directly (No Installation Required)\n\nPerfect for development, testing, or quick usage:\n\n**Option 1: Run with Go (Development)**\n\n```bash\n# Production mode\ngo run main.go\n\n# Development mode with hot reload (recommended for development)\ngo run main.go -dev\n\n# Or use make\nmake run\n```\n\n**Option 2: Run the compiled binary**\n\n```bash\n# Build first\nmake build\n\n# Run in foreground (see logs, stop with Ctrl+C)\nbin/podium\n\n# Run in background\nbin/podium \u0026\n\n# Run with nohup (survives terminal close)\nnohup bin/podium \u003e podium.log 2\u003e\u00261 \u0026\n```\n\n**When running directly:**\n\n- ✅ No installation needed\n- ✅ See logs in terminal\n- ✅ Easy to start/stop\n- ✅ No admin/sudo required\n- ⚠️ Stops when terminal closes (unless using nohup/background)\n- ⚠️ Doesn't start automatically on boot\n\n### Running as a System Service\n\nFor production use, auto-start on boot, and background operation:\n\nSee the [System Service Installation](#system-service-installation) section below.\n\n**When running as a service:**\n\n- ✅ Starts automatically on boot\n- ✅ Runs in background always\n- ✅ Managed by OS (systemd/launchd/Windows Service)\n- ✅ Auto-restart on failure (OS-dependent)\n- ⚠️ Requires installation step\n- ⚠️ May need admin/sudo (Linux)\n\n## Building\n\nPodium includes build scripts and Makefile for easy compilation across platforms.\n\n### Quick Build\n\n**Using Makefile** (Recommended):\n\n```bash\n# Build for current platform\nmake build\n\n# Build for all platforms\nmake build-all\n\n# Build for specific platforms\nmake build-linux\nmake build-macos\nmake build-windows\n```\n\n**Using build scripts**:\n\nLinux/macOS:\n\n```bash\n./build.sh              # Build for current platform\n./build.sh all          # Build for all platforms\n./build.sh linux macos  # Build for specific platforms\n./build.sh clean        # Clean build artifacts\n```\n\nWindows:\n\n```cmd\nbuild.bat              REM Build for current platform\nbuild.bat all          REM Build for all platforms\nbuild.bat clean        REM Clean build artifacts\n```\n\n### Build Output\n\nAll binaries are placed in the `bin/` directory:\n\n```\nbin/\n├── podium                    # Current platform binary\n├── podium-linux-amd64        # Linux 64-bit\n├── podium-linux-arm64        # Linux ARM64\n├── podium-darwin-amd64       # macOS Intel\n├── podium-darwin-arm64       # macOS Apple Silicon\n└── podium-windows-amd64.exe  # Windows 64-bit\n```\n\n### Build Options\n\nThe build script supports the following options:\n\n- `current` - Build for current platform only (default)\n- `all` - Build for all supported platforms\n- `linux` - Build for Linux (amd64 and arm64)\n- `macos` or `darwin` - Build for macOS (amd64 and arm64)\n- `windows` - Build for Windows (amd64)\n- `clean` - Remove all build artifacts\n\n### Manual Build\n\nYou can also build manually with Go:\n\n```bash\n# Current platform\ngo build -o bin/podium .\n\n# Cross-compile for specific platform\nGOOS=linux GOARCH=amd64 go build -o bin/podium-linux-amd64 .\nGOOS=windows GOARCH=amd64 go build -o bin/podium-windows-amd64.exe .\nGOOS=darwin GOARCH=arm64 go build -o bin/podium-darwin-arm64 .\n```\n\n## Usage\n\n### Creating Blog Posts\n\n1. Create a new `.md` file in the `posts/` directory\n2. Optionally add front matter at the top:\n   - `Tags: tag1, tag2, tag3` - Add tags for categorization\n   - `Date: 2025-11-03` - Publication date (YYYY-MM-DD format)\n   - `PublishDate: 2025-12-01 09:00` - Schedule post for future publication\n   - `Featured: true` - Pin post to top of blog list with special badge\n   - `Draft: true` - Mark as draft to hide from public view\n3. Start your content with a heading (e.g., `# My Post Title`)\n4. Write your content using Markdown syntax\n5. The post will automatically appear in the blog posts list (unless it's a draft or scheduled for future)\n\nExample:\n\n```markdown\nTags: golang, tutorial, webdev\nDate: 2025-11-03\nFeatured: true\n\n# My Awesome Post\n\nThis is my blog post content with **bold** and _italic_ text.\n\n## Code Example\n\n\\`\\`\\`go\nfunc main() {\nfmt.Println(\"Hello, Podium!\")\n}\n\\`\\`\\`\n```\n\n**Features:**\n\n- **Tags**: Automatically extracted and displayed on posts. Click a tag to filter posts.\n- **Dates**: Posts are sorted by date (newest first) and show publication date and reading time.\n- **Featured Posts**: Add `Featured: true` to pin posts to the top of the list with a ⭐ badge and special styling. Perfect for announcements or popular content.\n- **Post Scheduling**: Add `PublishDate: 2025-12-01 09:00` to schedule a post for future publication. Format is `YYYY-MM-DD HH:MM` (24-hour time). Posts remain hidden until the publish date/time arrives.\n- **Drafts**: Add `Draft: true` to hide a post until you're ready to publish.\n- **Excerpts**: The first 200 characters (configurable) appear on the posts list page.\n- **Reading Time**: Automatically calculated based on word count (~225 words/minute).\n\n#### Post Scheduling Example\n\n```markdown\nTags: announcement\nDate: 2025-11-05\nPublishDate: 2025-12-01 09:00\n\n# Future Announcement\n\nThis post will automatically become visible on December 1st, 2025 at 9:00 AM.\nNo server restart needed!\n```\n\n### Creating Static Pages\n\n1. Create a new `.md` file in the `static/` directory\n2. Optionally add `Draft: true` at the top to hide the page\n3. Start your file with a heading (e.g., `# Page Title`)\n4. Write your content using Markdown syntax\n5. The page will automatically appear in the navigation menu (unless it's a draft)\n\nExample:\n\n```markdown\n# About\n\nThis is my about page...\n```\n\n**Note**: Static pages don't have dates or tags - they're timeless content like About, Contact, etc.\n\n### Supported Markdown Features\n\n- Headings (H1-H6)\n- Bold and italic text\n- Lists (ordered and unordered)\n- **Code blocks with syntax highlighting** (powered by highlight.js)\n- Inline code\n- Blockquotes\n- Links and images\n- **Tags for blog posts**\n- And more!\n\n## Routes\n\n- `/` - Home page (or redirects to `/posts` if `disable_landing_page` is true)\n- `/posts` - List of all blog posts (with pagination)\n- `/posts/:slug` - Individual blog post (with share buttons)\n- `/page/:slug` - Static page\n- `/tags/:tag` - Filter posts by tag (with pagination)\n- `/feed.xml` - RSS/Atom feed for blog subscribers\n- `/sitemap.xml` - XML sitemap for search engines\n- `/assets/*` - Static assets (CSS, JS, images, etc.)\n- `404` - Custom error page for not found resources\n- `500` - Custom error page for server errors\n\n## Customization\n\n### Theme Toggle\n\nPodium includes a dark/light theme toggle in the navigation. The theme preference is saved to the user's browser localStorage and persists across sessions.\n\n### Styling\n\nEdit `assets/style.css` to customize the look and feel of your website. The CSS uses CSS variables for easy theming:\n\n- Light theme colors in `:root`\n- Dark theme colors in `[data-theme=\"dark\"]`\n- Responsive breakpoints at 768px and 480px\n- Print-friendly styles in `@media print`\n\n### Templates\n\nModify the HTML templates in the `templates/` directory to change the layout and structure.\n\n### Share Buttons\n\nIndividual blog posts include share buttons for:\n\n- Twitter (X)\n- LinkedIn\n- Facebook\n- Reddit\n- Copy link to clipboard\n\nThese are automatically included on all blog posts.\n\n## Dependencies\n\n- [Gin](https://github.com/gin-gonic/gin) v1.11.0 - Web framework\n- [Blackfriday](https://github.com/russross/blackfriday) v2.1.0 - Markdown parser\n- [Service](https://github.com/kardianos/service) - Cross-platform service management\n- [YAML](https://gopkg.in/yaml.v3) - YAML configuration parser\n- [fsnotify](https://github.com/fsnotify/fsnotify) v1.9.0 - File system notifications for hot reload\n- [tdewolff/minify](https://github.com/tdewolff/minify) v2 - CSS/JS minification\n- [imaging](https://github.com/disintegration/imaging) v1.6.2 - Image optimization and resizing\n- [Highlight.js](https://highlightjs.org/) v11.9.0 (CDN) - Syntax highlighting\n\n## System Service Installation\n\nPodium can be installed as a system service on Windows, macOS, and Linux, allowing it to run automatically on system startup.\n\n### Quick Installation\n\n#### Linux\n\n```bash\n# Build the binary\nmake build\n\n# Install as service (requires sudo)\nsudo ./podium -service install\n\n# Start the service\nsudo ./podium -service start\n\n# Enable on boot (systemd)\nsudo systemctl enable Podium\n```\n\nOr use the provided script:\n\n```bash\nsudo ./install-service.sh\n```\n\n#### macOS\n\n```bash\n# Build the binary\nmake build\n\n# Install as service (user-level, no sudo needed)\n./podium -service install\n\n# Start the service\n./podium -service start\n```\n\nOr use the provided script:\n\n```bash\n./install-service.sh\n```\n\n**Note**: On macOS, the service installs as a user-level LaunchAgent. For system-wide installation (LaunchDaemon), you would need to run with `sudo`, but user-level is recommended for most use cases.\n\n#### Windows\n\nOpen Command Prompt or PowerShell **as Administrator**:\n\n```cmd\nREM Build the binary\ngo build -o podium.exe\n\nREM Install as service\npodium.exe -service install\n\nREM Start the service\npodium.exe -service start\n```\n\nOr run the provided batch file **as Administrator**:\n\n```cmd\ninstall-service.bat\n```\n\n### Service Management Commands\n\nAll platforms support the following commands:\n\n```bash\n# Install the service\n./podium -service install\n\n# Start the service\n./podium -service start\n\n# Stop the service\n./podium -service stop\n\n# Restart the service\n./podium -service restart\n\n# Uninstall the service\n./podium -service uninstall\n```\n\n**Note:** On Linux, you need to use `sudo` for all service commands.\n\n### Platform-Specific Service Management\n\n#### Linux (systemd)\n\nAfter installation, you can also use systemctl:\n\n```bash\nsudo systemctl start Podium\nsudo systemctl stop Podium\nsudo systemctl restart Podium\nsudo systemctl status Podium\nsudo systemctl enable Podium   # Start on boot\nsudo systemctl disable Podium  # Don't start on boot\n```\n\nService logs can be viewed with:\n\n```bash\nsudo journalctl -u Podium -f\n```\n\n#### macOS (launchd)\n\nAfter installation, the service is managed by launchd. You can also use:\n\n```bash\n# Start service\nsudo launchctl load ~/Library/LaunchAgents/Podium.plist\n\n# Stop service\nsudo launchctl unload ~/Library/LaunchAgents/Podium.plist\n\n# View logs\ntail -f ~/Library/Logs/Podium.err.log\n```\n\n#### Windows\n\nAfter installation, you can manage the service through:\n\n1. **Services Manager (GUI)**:\n\n   - Press `Win+R`, type `services.msc`, press Enter\n   - Find \"Podium Web Server\" in the list\n   - Right-click to Start/Stop/Restart\n\n2. **Command Line**:\n\n   ```cmd\n   sc start Podium\n   sc stop Podium\n   sc query Podium\n   ```\n\n3. **PowerShell**:\n   ```powershell\n   Start-Service Podium\n   Stop-Service Podium\n   Restart-Service Podium\n   Get-Service Podium\n   ```\n\nView logs in Event Viewer (Application logs).\n\n### Service Configuration\n\nThe service is configured with the following settings:\n\n- **Name**: Podium\n- **Display Name**: Podium Web Server\n- **Description**: A lightweight web server for hosting markdown-based websites and blogs\n- **Port**: 8080\n- **Working Directory**: The directory where Podium is installed\n\n### Troubleshooting\n\n**Service won't start:**\n\n- Ensure port 8080 is not already in use\n- Check that the working directory contains the required folders (posts, static, templates, assets)\n- On Linux/macOS, verify file permissions\n- On Windows, ensure you ran the installation as Administrator\n\n**Cannot access the website:**\n\n- Verify the service is running\n- Check firewall settings to ensure port 8080 is allowed\n- Try accessing http://localhost:8080 from the server itself\n\n**Service crashes on startup:**\n\n- Check system logs for error messages\n- Ensure all dependencies are present (templates, assets, etc.)\n- Verify the Go binary is compatible with your system architecture\n\n## Performance Optimizations\n\nPodium includes several performance optimizations to ensure fast page loads:\n\n### Asset Minification\n\nCSS and JavaScript files are automatically minified in production mode:\n\n- Reduces file sizes by 30-60%\n- Faster page load times\n- Automatic in production, disabled in dev mode for easier debugging\n\n### Image Optimization\n\nImages can be dynamically optimized and resized:\n\n```html\n\u003c!-- Original image --\u003e\n\u003cimg src=\"/assets/image.jpg\" alt=\"Original\" /\u003e\n\n\u003c!-- Resized by width (maintains aspect ratio) --\u003e\n\u003cimg src=\"/assets/image.jpg?w=800\" alt=\"Resized\" /\u003e\n\n\u003c!-- Resized by width and height --\u003e\n\u003cimg src=\"/assets/image.jpg?w=800\u0026h=600\" alt=\"Exact size\" /\u003e\n\n\u003c!-- Optimized quality (reduced file size) --\u003e\n\u003cimg src=\"/assets/image.jpg?optimize=true\" alt=\"Optimized\" /\u003e\n```\n\nFeatures:\n\n- On-demand image resizing\n- Quality optimization for JPEG and PNG\n- Automatic max-width limiting (1920px)\n- Lazy loading enabled by default\n\n### HTTP Caching\n\nSmart caching headers are automatically set:\n\n- CSS/JS: 7 days\n- Images: 30 days\n- Fonts: 1 year\n- HTML: 5 minutes with revalidation\n- ETag support for 304 Not Modified responses\n\n### Sitemap Generation\n\nPodium automatically generates a sitemap at `/sitemap.xml` including:\n\n- Homepage and blog posts page\n- All published blog posts with lastmod dates\n- All static pages\n- RSS feed\n- Proper priority and changefreq values\n\n## Development Mode\n\nTo run Podium in development mode (not as a service):\n\n```bash\n# Run directly\ngo run main.go\n\n# Or use make\nmake run\n```\n\nThis is useful for development and testing, as you'll see output directly in the terminal.\n\n## Building for Different Platforms\n\nUse the Makefile to build for specific platforms:\n\n```bash\n# Build for current platform\nmake build\n\n# Build for Linux\nmake build-linux\n\n# Build for Windows\nmake build-windows\n\n# Build for macOS\nmake build-macos\n\n# Build for all platforms\nmake build-all\n```\n\n## License\n\nThis project is open source and available under the MIT License.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmojoaar%2Fpodium","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmojoaar%2Fpodium","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmojoaar%2Fpodium/lists"}