A semantic search engine for blog posts and RSS feeds, powered by vector embeddings and AI.
- π Semantic Search: Find blog posts and RSS feeds using natural language queries
- π± Mobile Responsive: Optimized for all screen sizes
- π·οΈ Content Filtering: Filter by content type (blogs, academic, news) and time periods
- π RSS Feed Discovery: Search and discover RSS feeds with export functionality
- π Export Options: Export RSS feeds as OPML or CSV files
- β‘ Fast Search: Powered by Pinecone vector database and Voyage AI embeddings
- Backend: Go 1.21 with Gorilla Mux router
- Frontend: Vanilla HTML, CSS, and JavaScript
- Vector Database: Pinecone
- Embeddings: Voyage AI
- Deployment: Docker support included
- Go 1.21 or later
- Pinecone account and API key
- Voyage AI account and API key
-
Clone the repository
git clone https://github.com/alastairrushworth/blognerd.app.git cd blognerd.app -
Install Go dependencies
go mod download
-
Set up environment variables
cp .env.example .env
Edit
.envand add your API keys:PINECONE_API_KEY=your-pinecone-api-key PINECONE_V2_ENVIRONMENT=your-pinecone-environment PINECONE_V2_INDEX=your-pinecone-index-name PINECONE_V2_HOST=your-pinecone-host-url VOYAGE_API_KEY=your-voyage-ai-api-key -
Run the application
go run .Or build and run:
go build -o blognerd-server ./blognerd-server
-
Open in browser
http://localhost:8000
Build and run with Docker:
docker build -t blognerd-app .
docker run -p 8000:8000 --env-file .env blognerd-appGET /api/search?qry=<query>&type=<pages|sites>&content=<content_type>&time=<time_filter>- Returns JSON with search results
GET /api/export/opml?qry=<query>&type=sites- Export RSS feeds as OPMLGET /api/export/csv?qry=<query>&type=sites- Export RSS feeds as CSV
ai machine learning
site:openai.com
like:https://example.com/blog-post
like:example.com
type:blogs- Blog posts onlytype:academic- Academic paperstype:news- News articlestype:feeds- RSS feeds only
since:last_week- Past weeksince:last_month- Past monthsince:last_year- Past year
The codebase is organized into focused modules for maintainability:
blognerd.app/
βββ main.go # Application bootstrap and routing (74 lines)
βββ types.go # Data structures and type definitions
βββ handlers.go # HTTP request handlers (home, search, API)
βββ search.go # Search functionality and query processing
βββ rss.go # RSS feed generation and caching
βββ export.go # OPML and CSV export functionality
βββ custom_rss.go # Custom RSS workflow processing
βββ utils.go # Utility functions (parsing, formatting, etc.)
βββ pinecone.go # Pinecone vector database client
βββ voyage.go # Voyage AI embeddings client
βββ templates/ # HTML templates
β βββ index.html
β βββ head.html
β βββ styles.html
β βββ scripts.html
β βββ rss-builder.html
β βββ search-state.html
β βββ initial-state.html
β βββ footer.html
βββ static/ # Static assets (CSS, images)
βββ .env.example # Environment variables template
βββ Dockerfile # Docker configuration
βββ go.mod # Go module definition
βββ README.md # This file
main.go: Minimal bootstrap code - initializes clients, templates, routestypes.go: All struct definitions (SearchResult, App, CustomRSSConfig, etc.)handlers.go: HTTP handlers for web pages and API endpointssearch.go: Core search logic, Pinecone queries, result processingrss.go: RSS feed generation with caching and cleanupexport.go: OPML and CSV export for RSS feedscustom_rss.go: Advanced RSS workflow builder functionalityutils.go: Shared utilities for date parsing, URL cleaning, XML escapingpinecone.go: Vector database client and operationsvoyage.go: Embedding generation client
- Backend changes: Modify the appropriate Go files
- Frontend changes: Edit
templates/index.html - Static assets: Add to
static/directory
- Follow standard Go conventions
- Use
gofmtfor formatting - Add comments for public functions
- Keep functions focused and small
- Fork the repository
- Create a feature branch:
git checkout -b feature-name - Make your changes and test thoroughly
- Commit with descriptive messages:
git commit -m "Add feature description" - Push to your fork:
git push origin feature-name - Create a pull request
This project is open source. See the repository for license details.
For issues and questions:
- Open an issue on GitHub
- Check existing issues for similar problems
- Powered by Pinecone vector database
- Embeddings by Voyage AI
- Built with Go and Gorilla Mux