9f07b0c6f98b68d5afe4a4cea898f3ee805a2b25
- Defined all 8 data models (Page, Widget, Bookmark, Note, TagAssociation, Group, Share, Preferences) - Implemented DynamoDB table creation for all tables with proper schemas - Added GSIs for efficient querying (UserBookmarksIndex, UserNotesIndex, TagItemsIndex, UserSharesIndex) - Comprehensive test coverage for all table schemas - Updated init-db command to create all tables
Custom Start Page Application
A personalized dashboard web application that allows users to create and manage custom start pages with configurable widgets, multiple pages, and customizable search functionality.
Features
- OAuth Authentication: Secure login with Google OAuth (extensible to other providers)
- Multi-Page Dashboard: Organize widgets across multiple pages
- Widget System: Bookmark, Notes, and Weather widgets
- Tag System: Organize bookmarks and notes with tags
- Group System: Group bookmarks within widgets
- Rich Content: Support for plain text, RTF, code, YAML, and Markdown in notes
- Sharing: Share bookmarks and notes with others
- Responsive Design: Works on desktop, tablet, and mobile devices
Technology Stack
- Backend: Go 1.26+
- Frontend: HTMX, Tailwind CSS, Vanilla JavaScript
- Database: AWS DynamoDB (with DynamoDB Local for development)
- Testing: Go testing package + gopter for property-based tests
Prerequisites
- Go 1.26 or higher (installed at
/usr/local/go/bin/go) - Docker and Docker Compose (for DynamoDB Local)
- Google OAuth credentials (for authentication)
Getting Started
1. Clone the repository
git clone <repository-url>
cd custom-start-page
2. Set up environment variables
cp .env.example .env
# Edit .env and add your Google OAuth credentials
3. Start DynamoDB Local
make db-start
4. Install dependencies
make deps
5. Run the application
make dev
The application will be available at http://localhost:8080
Development
Available Make Commands
make help- Show available commandsmake build- Build the applicationmake run- Run the applicationmake test- Run all testsmake test-coverage- Run tests with coverage reportmake dev- Start development environment (DynamoDB + server)make db-start- Start DynamoDB localmake db-stop- Stop DynamoDB localmake db-reset- Reset DynamoDB local datamake deps- Download dependenciesmake fmt- Format codemake clean- Clean build artifacts
Project Structure
.
├── cmd/
│ └── server/ # Main application entry point
├── internal/
│ ├── auth/ # Authentication logic
│ ├── handlers/ # HTTP handlers
│ ├── models/ # Data models
│ ├── services/ # Business logic
│ ├── storage/ # Database layer
│ └── testing/ # Test helpers
├── pkg/
│ └── config/ # Configuration management
├── templates/
│ ├── layouts/ # Base HTML templates
│ ├── partials/ # Reusable template components
│ └── widgets/ # Widget templates
├── static/
│ ├── css/ # Stylesheets
│ ├── js/ # JavaScript files
│ └── images/ # Static images
├── docker-compose.yml # DynamoDB Local setup
├── Makefile # Development commands
└── README.md # This file
Testing
The project uses both unit tests and property-based tests:
# Run all tests
make test
# Run tests with coverage
make test-coverage
Property-based tests use gopter to verify correctness properties across many generated inputs.
Configuration
Configuration is managed through environment variables. See .env.example for available options:
PORT- Server port (default: 8080)HOST- Server host (default: localhost)DYNAMODB_ENDPOINT- DynamoDB endpoint (default: http://localhost:8000)GOOGLE_CLIENT_ID- Google OAuth client IDGOOGLE_CLIENT_SECRET- Google OAuth client secretSESSION_SECRET- Session encryption key
Architecture
The application follows a hypermedia-driven architecture:
- Server-side rendering: HTML templates rendered by Go
- HTMX: Dynamic interactions without complex JavaScript
- DynamoDB: Scalable NoSQL database for user data
- OAuth: Secure authentication with external providers
License
[Add your license here]
Contributing
[Add contribution guidelines here]
Description
Languages
Go
92.1%
HTML
6.5%
Makefile
0.8%
CSS
0.3%
JavaScript
0.3%