# Hako Hako is a self-hosted link archival service that automatically saves and preserves web content. Save URLs and let Hako archive them using multiple archival methods, extract content for full-text search, and organize your saved links with categories. ## Features - **Link Archival**: Save URLs and automatically archive web content. - **Multiple Archivers**: Support for different archival methods depending on the site or content type. - **Content Extraction**: Extract text content from PDFs and web pages for full-text search - **Rule Engine**: Configurable rules that automatically select appropriate archivers based on URL patterns, hostnames, and content types - **Categories**: Organize links in categories. - **Archive History**: Track multiple archive versions for each link if archived multiple times. - **Full-Text Search**: Search through archived content. - **Self-Hosted**: Full control over your archived data ## Tech stack - Go - Vue 3 - Bun ## Screenshots See [docs/screenshots](docs/screenshots.md). ## Running the Application This project uses a Makefile for common tasks. Run `make help` to see all available commands. ### Backend To build and run the backend: ```bash # Build the webapp (required for embedded frontend) make build-webapp # Run the server only (without building webapp) make run-server ``` ### Frontend The frontend is built with Vue.js and Vite, using Bun as the package manager: ```bash # Run the webapp in development mode with hot-reload make run-webapp # Build the webapp for production make build-webapp ``` ## Docker ### Running with Docker Compose To run Hako locally using Docker Compose: ```bash # Build the docker binaries make build-docker # Start the container docker compose up # Or run in detached mode docker compose up -d ``` The service will be available at `http://localhost:8080`. ### Building Docker Images To build Docker images using goreleaser (for production builds): ```bash # Build Docker image locally (creates multi-arch images) make build-docker ``` This will build Docker images for multiple architectures (amd64, arm64, armv7) using goreleaser. ## Development ### Development Commands Common development tasks: ```bash # Run linting (server and webapp) make lint # Run test suite make test # Run integration tests make e2e # Format code make format # Clean build artifacts make clean # Clear dev data (keeps config.yaml) make clean-devdata ``` Run `make help` to see all available commands.