Contributing to Atom
Thank you for your interest in contributing to Atom! This guide covers contributing to both the application code and the documentation.
Documentation Contributions
The Atom documentation site is built with Retype and lives in the docs/ folder of the repository. It's deployed to Cloudflare Pages automatically when changes are merged.
Quick Start
- Fork the repository: github.com/stackryze/atom-homepage
- Clone your fork:
git clone https://github.com/YOUR-USERNAME/atom-homepage.git cd atom-homepage - Create a branch from
docs:git checkout docs git checkout -b docs/your-change-name - Edit files in the
docs/folder - Preview locally (optional):
npx retypeapp start docs/ - Commit and push:
git add docs/ git commit -m "docs: your change description" git push origin docs/your-change-name - Open a Pull Request targeting the
docsbranch
Documentation Structure
docs/
├── retype.yml # Retype project config
├── index.md # Home page
├── getting-started/ # Installation & setup
│ ├── index.md
│ └── installation.md
├── configuration/ # Dashboard & appearance config
│ ├── index.md
│ ├── dashboard.md
│ └── appearance.md
├── features/ # Feature documentation
│ ├── index.md
│ ├── docker.md
│ ├── sso.md
│ ├── monitoring.md
│ └── forward-auth.md
├── widgets/ # Widget documentation
│ ├── index.md
│ ├── system-monitor.md
│ ├── clock.md
│ └── ... (one file per widget)
├── community/ # Community section
│ ├── index.md
│ ├── widgets.md # Community widget presets
│ └── contributing.md # This file
└── api/ # API reference
└── index.md
Writing Guidelines
- Use Retype Markdown syntax
- Include frontmatter with
label,icon, andorder - Use tabs (
+++ Tab Name) for multi-option instructions - Use callouts (
!!!warning,!!!info) for important notes - Add code blocks with language identifiers
- Link to other docs pages using relative paths (e.g.,
/widgets/generic/)
Community Widget Contributions
The easiest way to contribute is adding widget presets:
Steps
- Open
docs/community/widgets.md - Add your widget under the appropriate category heading
- Include:
- App name and description
- JSON configuration block
- API endpoint and fields table
- Any authentication requirements
- Submit a PR to the
docsbranch
Template
### App Name — Feature Description
Brief description of what this widget shows.
\```json
{
"type": "generic",
"title": "App Name",
"options": {
"url": "https://app.example.com",
"fields": [
{ "label": "Field Name", "path": "json.path" }
]
}
}
\```
| Field | Value |
|---|---|
| Endpoint | `/api/endpoint` |
| Auth | API key via header |
| Displays | Field 1, Field 2 |
Code Contributions
Setup
git clone https://github.com/stackryze/atom-homepage.git
cd atom-homepage
npm install
npm run dev
Development Commands
Branch Naming
Commit Messages
Follow Conventional Commits:
feat: add bookmarks widget
fix: resolve SSO callback URL mismatch
docs: add Pi-hole widget preset
perf: optimize bundle with dynamic imports
Pull Request Process
- Ensure
npm run lintpasses with zero warnings - Ensure
npm run buildsucceeds - Add tests for new functionality when applicable
- Update documentation if adding user-facing features
- Keep PRs focused — one feature/fix per PR
Code of Conduct
All contributors must follow the Code of Conduct. Be respectful and constructive in all interactions.
License
By contributing, you agree that your contributions will be licensed under the MIT License.