[![CI]()](https://github.com/hyperpolymath/branch-newspaper/actions/workflows/ci.yml) [![Mirror Sync]()](https://github.com/hyperpolymath/branch-newspaper/actions/workflows/mirror-sync.yml) [![CodeQL]()](https://github.com/hyperpolymath/branch-newspaper/actions/workflows/codeql.yml)
A Phoenix LiveView application for citizen journalists and union branches with integration for decentralized content storage.
-
Meeting Minutes Management - Create, edit, and organize meeting minutes
-
IPFS Integration - Store content on IPFS for decentralized, immutable storage
-
Real-time UI - Phoenix LiveView for instant updates without page reloads
-
Tag Organization - Categorize minutes with tags for easy discovery
| Component | Technology | |-----------|------------| | Language | Elixir ~> 1.15 | | Framework | Phoenix 1.8.1 | | Real-time | Phoenix LiveView 1.1.0 | | Database | SQLite3 (dev) / PostgreSQL (prod) | | Storage | IPFS (Kubo) | | CSS | Tailwind CSS v4 |
-
Elixir 1.15+ and Erlang/OTP 25+
-
Node.js 18+ (for asset compilation)
-
IPFS node (Kubo) running locally or accessible
-
Clone the repository
bash git clone https://github.com/hyperpolymath/branch-newspaper.git cd branch-newspaper -
Install dependencies and setup database
bash mix setup -
Start the IPFS daemon (in a separate terminal)
bash ipfs daemon -
Start the Phoenix server
bash mix phx.server # Or with interactive Elixir shell: iex -S mix phx.server -
Visit the application
Open [http://localhost:4000](http://localhost:4000) in your browser.
= Run all tests
mix test
= Run with coverage
mix test --cover
= Run the precommit checks (format, compile warnings, tests)
mix precommit| Variable | Description | Default |
|----------|-------------|---------|
| SECRET_KEY_BASE | Phoenix secret key | (generated) |
| DATABASE_URL | Database connection string | SQLite file |
| PHX_HOST | Production hostname | localhost |
| PORT | HTTP port | 4000 |
| IPFS_API_URL | IPFS API endpoint | http://localhost:5001/api/v0 |
See [SECRETS.md](SECRETS.md) for complete secrets documentation.
branch-newspaper/
├── assets/ # Frontend assets (JS, CSS)
├── ci-scripts/ # Shared CI/CD scripts
├── config/ # Application configuration
├── lib/
│ ├── branch_newspaper/ # Business logic
│ │ ├── content/ # Content domain
│ │ └── services/ # External services (IPFS)
│ └── branch_newspaper_web/ # Web interface
│ ├── components/ # UI components
│ ├── controllers/ # HTTP controllers
│ └── live/ # LiveView modules
├── priv/ # Private application files
└── test/ # Test files-
[ROADMAP.adoc](ROADMAP.adoc) - Development roadmap and MVP plan
-
[TODO.md](TODO.md) - Task backlog and improvements
-
[SECRETS.md](SECRETS.md) - Secrets and configuration guide
-
[AGENTS.md](AGENTS.md) - AI coding guidelines
This project uses unified CI/CD that runs on both GitHub Actions and GitLab CI:
-
Lint - Code formatting and static analysis
-
Test - ExUnit tests across multiple Elixir versions
-
Build - Release compilation for deployment
-
Mirror - Automatic sync between GitHub and GitLab
-
Fork the repository
-
Create a feature branch (
git checkout -b feature/amazing-feature) -
Run the precommit checks (
mix precommit) -
Commit your changes (
git commit -m 'Add amazing feature') -
Push to the branch (
git push origin feature/amazing-feature) -
Open a Pull Request
-
Primary (GitHub): https://github.com/hyperpolymath/branch-newspaper
-
Mirror (GitLab): https://gitlab.com/maa-framework/3-applications/branch-newspaper
Changes pushed to GitHub are automatically mirrored to GitLab.
This project is licensed under the Palimpsest-MPL-1.0 License - see the [LICENSE](LICENSE) file for details.
-
[Phoenix Framework](https://phoenixframework.org/)
-
[IPFS](https://ipfs.tech/)
-
Part of the [MAA Framework](https://gitlab.com/maa-framework) project