Skip to content

Commit f101b96

Browse files
authored
Merge pull request #21 from byrdsandbytes/doc/changelog
Doc/changelog
2 parents 731067a + 87d3dcb commit f101b96

28 files changed

+638
-98
lines changed

.github/workflows/codeql.yml

Lines changed: 0 additions & 40 deletions
This file was deleted.

.gitignore

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,5 +68,7 @@ testem.log
6868
# System files
6969
.DS_Store
7070
Thumbs.db
71+
72+
# Platform directories
73+
android/*
7174
ios/*
72-
.vscode/*

CHANGELOG.md

Lines changed: 111 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,111 @@
1+
# Changelog
2+
3+
## [0.2.1] - 2025-08-01
4+
5+
### Added
6+
- Add changelog
7+
8+
## [0.2.0] - 2025-07-23
9+
10+
### Added
11+
- Add group, server and stream requests
12+
- Add client mutation functions
13+
- Connect to state in app component, add triggers for foreground and background events
14+
- Handle mobile page lifecycles
15+
- Add client name to selectors and list
16+
- Add client detail page
17+
- Add indicator fab logic
18+
- Add first version of github workflows
19+
- Add user preference hostname
20+
- Key value store for user peferences, variable hostname, menu page, settings page
21+
- Add preview screen
22+
- Add basic readme
23+
- Add device details page
24+
- Add devices page
25+
- Extend snapcast service with group functions
26+
- Add haptic feedback
27+
- Add capacitor and compile iOS POC
28+
- Add font
29+
- Add icons
30+
31+
### Changed
32+
- Update docker-compose.yml
33+
- Improve readme
34+
- Update readme with docker setup
35+
- Standardize server naming
36+
- Rename project
37+
- Shift snapcast server url to env
38+
- Improve change detection
39+
- Decrease playertoolbar size
40+
- Refactoring state management
41+
- Handling states
42+
- Setting up snapcast connection
43+
- First hacky version of services and ui
44+
- Tab routing
45+
- Handle websocket notifications
46+
- Improve realtiminess
47+
- Clean up naming
48+
- Routing
49+
- Player toolbar formatting
50+
51+
### Fixed
52+
- Fix desktop slider issues
53+
- Fix broken link
54+
- Fix title
55+
- Fix disappearing range
56+
- Hacky fix for overlapping tabbar
57+
58+
### Removed
59+
- Remove double linting
60+
- Remove old user preference service
61+
- Remove deprecated service impor
62+
- Remove old server stauts
63+
- Remove old imports
64+
- Clean up old service
65+
- Remove auto generated assets, pages and components
66+
- Removed over-engineered "desired" and "reported" state logic
67+
68+
## [0.1.0] - 2025-07-14
69+
70+
### Added
71+
- Add contributing and app compile infos
72+
- Add docker installation guide
73+
- Add docker setup
74+
- Add favicon
75+
76+
### Changed
77+
- Update readme
78+
79+
## [0.0.3] - 2025-07-13
80+
81+
### Added
82+
- User preferences in dashboard, loading and error handling
83+
84+
### Changed
85+
- Clean up naming
86+
- Routing
87+
88+
### Fixed
89+
- Prevent range jitter if multiple apps are connected
90+
91+
## [0.0.2] - 2025-06-22
92+
93+
### Added
94+
- Create LICENSE
95+
96+
### Changed
97+
- Rename project
98+
- Shift snapcast server url to env
99+
100+
### Removed
101+
- Clean up old service
102+
- Remove auto generated assets, pages and components
103+
104+
### Changed
105+
- Refactored state management
106+
- Use base64 for art data
107+
- Add android platform to gitignore configuration
108+
109+
### Added
110+
- Add mock server for testing
111+
- Add proof-of-concept for speaker selection

PRIVACY_POLICY.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Privacy Policy for Beatnik Controller
2+
3+
**Last Updated:** August 1, 2025
4+
5+
This Privacy Policy describes how Beatnik Controller ("we," "us," or "our") handles your information when you use our web application and mobile applications (the "App").
6+
7+
## Introduction
8+
9+
Your privacy is important to us. Beatnik Controller is designed to be a local remote control for your Snapcast server. Our policy is simple: we do not collect, store, or share any of your personal information. All data required for the app to function is stored locally on your device.
10+
11+
## Information We Collect
12+
13+
Beatnik Controller does **not** collect any personally identifiable information. The App handles the following data, which is stored exclusively on your device (e.g., in your browser's local storage or on your mobile device):
14+
15+
* **Snapcast Server Address:** The hostname or IP address of your Snapcast server that you provide to connect the App to your server.
16+
* **Application Settings:** User-specific settings such as client names, group configurations, and other preferences you set within the App.
17+
18+
This information is necessary for the core functionality of the App and is never transmitted to us or any third party.
19+
20+
## How We Use Your Information
21+
22+
The data stored by the App is used solely to:
23+
24+
* Establish and maintain a connection with your Snapcast server.
25+
* Remember your settings and preferences for a better user experience.
26+
* Allow the App to function as a remote control for your audio system.
27+
28+
## Data Storage and Security
29+
30+
All data entered into the App is stored locally on your device. We do not have access to this data. You are in full control of your information, and you can clear it at any time by clearing your browser's cache or the App's data on your mobile device.
31+
32+
## Third-Party Services
33+
34+
Beatnik Controller does not use any third-party services for analytics, advertising, or data collection.
35+
36+
## Changes to This Privacy Policy
37+
38+
We may update this Privacy Policy from time to time. We will notify you of any changes by posting the new Privacy Policy on this page. You are advised to review this Privacy Policy periodically for any changes.
39+
40+
## Contact Us
41+
42+
If you have any questions about this Privacy Policy, please open an issue on our [GitHub repository](https://github.com/byrdsandbytes/beatnik-controller/issues).

TERMS_OF_SERVICE.md

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
# Terms of Service for Beatnik Controller
2+
3+
**Last Updated:** August 1, 2025
4+
5+
Please read these Terms of Service ("Terms", "Terms of Service") carefully before using the Beatnik Controller web application and mobile applications (the "Service") operated by the Beatnik Controller project contributors ("us", "we", or "our").
6+
7+
Your access to and use of the Service is conditioned on your acceptance of and compliance with these Terms. These Terms apply to all visitors, users, and others who access or use the Service.
8+
9+
By accessing or using the Service, you agree to be bound by these Terms. If you disagree with any part of the terms, then you may not access the Service.
10+
11+
## 1. License
12+
13+
The Beatnik Controller application is free and open-source software licensed under the [AGPL v3 License](https://www.gnu.org/licenses/agpl-3.0.en.html). Your use of the software is subject to the terms of this license.
14+
15+
## 2. Use of the Service
16+
17+
You are responsible for your use of the Service and for any consequences thereof. The Service is a tool to control a [Snapcast](https://github.com/badaix/snapcast) server that you operate. You are responsible for the setup, configuration, and maintenance of your own Snapcast server.
18+
19+
You agree not to use the Service for any purpose that is illegal or prohibited by these Terms.
20+
21+
## 3. Disclaimer of Warranties
22+
23+
The Service is provided on an "AS IS" and "AS AVAILABLE" basis. The Service is provided without warranties of any kind, whether express or implied, including, but not limited to, implied warranties of merchantability, fitness for a particular purpose, non-infringement, or course of performance.
24+
25+
We do not warrant that the Service will function uninterrupted, secure, or available at any particular time or location; that any errors or defects will be corrected; or that the Service is free of viruses or other harmful components.
26+
27+
## 4. Limitation of Liability
28+
29+
In no event shall the project contributors, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from (i) your access to or use of or inability to access or use the Service; (ii) any conduct or content of any third party on the Service; (iii) any content obtained from the Service; and (iv) unauthorized access, use, or alteration of your transmissions or content, whether based on warranty, contract, tort (including negligence), or any other legal theory, whether or not we have been informed of the possibility of such damage, and even if a remedy set forth herein is found to have failed of its essential purpose.
30+
31+
## 5. Governing Law
32+
33+
These Terms shall be governed and construed in accordance with the laws of Switzerland, without regard to its conflict of law provisions.
34+
35+
Our failure to enforce any right or provision of these Terms will not be considered a waiver of those rights. If any provision of these Terms is held to be invalid or unenforceable by a court, the remaining provisions of these Terms will remain in effect.
36+
37+
## 6. Changes
38+
39+
We reserve the right, at our sole discretion, to modify or replace these Terms at any time. We will try to provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at our sole discretion.
40+
41+
By continuing to access or use our Service after those revisions become effective, you agree to be bound by the revised terms. If you do not agree to the new terms, please stop using the Service.
42+
43+
## 7. Contact Us
44+
45+
If you have any questions about these Terms, please open an issue on our [GitHub repository](https://github.com/byrdsandbytes/beatnik-controller/issues).

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "beatnik",
3-
"version": "0.1.0",
3+
"version": "0.2.1",
44
"author": "byrds & bytes gmbh",
55
"homepage": "https://beatnik.ch",
66
"scripts": {
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
2+
3+
<ion-header>
4+
<ion-toolbar>
5+
<ion-title>Choose Speakers</ion-title>
6+
<ion-buttons slot="end">
7+
<ion-button (click)="closeModal()">
8+
<ion-icon name="close"></ion-icon>
9+
</ion-button>
10+
</ion-buttons>
11+
</ion-toolbar>
12+
</ion-header>
13+
14+
<ion-content>
15+
<div class="choose-speakers-container">
16+
<p>Select the speakers you want to use:</p>
17+
<!-- Add your speaker selection logic here -->
18+
<div class="row">
19+
<div class="col-6" *ngFor="let speaker of speakers">
20+
<img [src]="speaker.image" alt="{{ speaker.manufacturer }} {{ speaker.model }}" class="speaker-image">
21+
<ion-item lines="none" (click)="selectSpeaker(speaker.id)">
22+
<ion-icon slot="end" [name]="'checkmark-circle'" *ngIf="selectedId === speaker.id"></ion-icon>
23+
<ion-label> <h2>{{ speaker.manufacturer }} {{ speaker.model }}</h2></ion-label>
24+
</ion-item>
25+
</div>
26+
</div>
27+
28+
<ion-button expand="full" color="primary" (click)="saveSelection()">
29+
Save Selection
30+
</ion-button>
31+
</div>
32+
</ion-content>

src/app/components/choose-speakers/choose-speakers.component.scss

Whitespace-only changes.
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
import { ComponentFixture, TestBed, waitForAsync } from '@angular/core/testing';
2+
import { IonicModule } from '@ionic/angular';
3+
4+
import { ChooseSpeakersComponent } from './choose-speakers.component';
5+
6+
describe('ChooseSpeakersComponent', () => {
7+
let component: ChooseSpeakersComponent;
8+
let fixture: ComponentFixture<ChooseSpeakersComponent>;
9+
10+
beforeEach(waitForAsync(() => {
11+
TestBed.configureTestingModule({
12+
declarations: [ ChooseSpeakersComponent ],
13+
imports: [IonicModule.forRoot()]
14+
}).compileComponents();
15+
16+
fixture = TestBed.createComponent(ChooseSpeakersComponent);
17+
component = fixture.componentInstance;
18+
fixture.detectChanges();
19+
}));
20+
21+
it('should create', () => {
22+
expect(component).toBeTruthy();
23+
});
24+
});

0 commit comments

Comments
 (0)