Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
17 changes: 17 additions & 0 deletions .dockerignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
node_modules
npm-debug.log*
yarn-debug.log*
yarn-error.log*
.git
.gitignore
README.md
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
coverage
.nyc_output
.cache
.DS_Store
*.log
37 changes: 37 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
# Dependencies
node_modules/
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# Environment variables
.env
.env.local
.env.development.local
.env.test.local
.env.production.local

# Logs
logs
*.log

# Runtime data
pids
*.pid
*.seed
*.pid.lock

# Optional npm cache directory
.npm

# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db

# Recordings (local storage)
recordings/
13 changes: 13 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
FROM node:18-alpine

WORKDIR /app

COPY package*.json ./

RUN npm ci --only=production

COPY . .

EXPOSE 3000

CMD ["npm", "start"]
46 changes: 43 additions & 3 deletions PLAN.md → README.md
Original file line number Diff line number Diff line change
@@ -1,11 +1,50 @@
# PLAN.md - OGBBC Conference Line Replacement MVP
# OGBBC Sermon Streaming Experiment

## Project Overview

**Objective**: Replace the Midwest Conference Line with a cost-effective, reliable worship service streaming system for Old German Baptist Brethren Church, New Conference (OGBBC) congregations.

**MVP Scope**: Single congregation implementation with host-controlled broadcasting and listener call-in functionality.

## Usage

### Prerequisites
- Node.js (v14 or higher)
- SignalWire account with a phone number

### Setup
1. Clone the repository.

2. Create a `.env` file in the root directory with your SignalWire credentials:
```
SIGNALWIRE_PROJECT_ID=your_project_id_here
SIGNALWIRE_TOKEN=your_token_here
SIGNALWIRE_SPACE_URL=your_space_url.signalwire.com
SIGNALWIRE_PHONE_NUMBER=+1234567890
HOST_PIN=12345
PORT=3000
```

3. Build and run with Docker:
```bash
docker build -t sermon-streaming .
docker run -p 3000:3000 --env-file .env sermon-streaming
```

4. Configure SignalWire:
- Create a **Relay Application** in SignalWire dashboard
- Set the topic to "ogbbc-sermon"
- Assign this application to your phone number in Phone Numbers > Your number > Settings > "Handle Calls Using" > Select the Relay application.

### How to Use
- **Host**: Call the SignalWire phone number and enter the host PIN (default: 1234) to start the conference.
- **Listeners**: Call the same number to join as muted participants.
- Recordings are saved locally in the `recordings/` directory (created automatically).

### Development
- Run linting: `npm run lint`
- Add tests in future phases.

## Requirements Analysis

### Functional Requirements
Expand All @@ -29,7 +68,7 @@

### Technology Stack
- **Backend**: [Node.js](https://nodejs.org) with [Express](https://expressjs.com)
- **Telephony**: [SignalWire](https://signalwire.com) REST API & [LaML](https://docs.signalwire.com/topics/laml/)
- **Telephony**: [SignalWire](https://signalwire.com) [Realtime API](https://docs.signalwire.com/topics/realtime/)
- **Frontend**: [Svelte](https://svelte.dev) with [@immich/ui](https://ui.immich.app)
- **Storage**: Local storage (database in future phases)
- **Hosting**: VPS ([DigitalOcean](https://digitalocean.com))
Expand All @@ -47,7 +86,8 @@
**Goal**: Working single-congregation conference line

#### Step 1: Core Infrastructure
- [ ] Set up SignalWire account and phone number
- [x] Set up SignalWire account and phone number
- [x] Implement basic call handling logic
- [ ] Create basic Express server structure
- [ ] Implement call routing logic
- [ ] Build host authentication system
Expand Down
20 changes: 20 additions & 0 deletions eslint.config.cjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
const js = require('@eslint/js');

module.exports = [
js.configs.recommended,
{
languageOptions: {
ecmaVersion: 2021,
sourceType: 'module',
globals: {
console: 'readonly',
process: 'readonly',
Buffer: 'readonly',
global: 'readonly',
},
},
rules: {
// Add custom rules here if needed
},
},
];
Loading