[![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= Check formatting
mix format --check-formatted
= Run all lint checks
./ci-scripts/lint.sh| 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
| Elixir | OTP | Status | |--------|-----|--------| | 1.15.0 | 25.3 | Minimum supported | | 1.15.7 | 26.2 | Primary | | 1.16.0 | 26.2 | Latest |
-
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
See TOPOLOGY for a visual architecture map and completion dashboard.