[![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
\'bashgitclonehttps://github.com/hyperpolymath/branch-newspaper.gitcdbranch-newspaper`
-
Install dependencies and setup database
\'bashmixsetup`
-
Start the IPFS daemon (in a separate terminal)
\'bashipfsdaemon`
-
Start the Phoenix server
\'bashmixphx.server#OrwithinteractiveElixirshell:iex-Smixphx.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 (
gitcheckout-bfeature/amazing-feature) -
Run the precommit checks (
mixprecommit) -
Commit your changes (
gitcommit-m’Addamazingfeature’) -
Push to the branch (
gitpushoriginfeature/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