···1212- Maybe swap from boltdb to sqlite
1313 - Use the non-cgo library
1414 - Is there a compelling reason to do this?
1515- - Might be good as a sort of witness-cache type thing
1515+ - Might be good as a sort of witness-cache type thing (record refs to avoid hitting PDS's as often?)
1616+ - Probably not worth unless we keep a copy of all (or all recent) network data
16171718- The profile, manage, and brews list pages all function in a similar fashion,
1819 should one or more of them be consolidated?
1920 - Manage + brews list together probably makes sense
2121+2222+- IMPORTANT: If this platform gains any traction, we will need some form of content moderation
2323+ - Due to the nature of arabica, this will only really be text based (text and hyperlinks)
2424+ - Malicious link scanning may be reasonable, not sure about deeper text analysis
2525+ - Need to do more research into security
2626+ - Need admin tooling at the app level that will allow deleting records (may not be possible),
2727+ removing from appview, blacklisting users (and maybe IPs?), possibly more
2828+ - Having accounts with admin rights may be an approach to this (configured with flags at startup time?)
2929+ @arabica.social, @pdewey.com, maybe others? (need trusted users in other time zones probably)
20302131## Features
2232
···11-import './styles.css';
22-import App from './App.svelte';
11+import "./styles.css";
22+import App from "./App.svelte";
3344// Register service worker for PWA functionality
55// Note: Service workers require a secure context (HTTPS) or localhost/127.0.0.1 for development
66-if ('serviceWorker' in navigator) {
66+if ("serviceWorker" in navigator) {
77 // Wait for page load before registering
88- window.addEventListener('load', () => {
88+ window.addEventListener("load", () => {
99 navigator.serviceWorker
1010- .register('/static/service-worker.js', { scope: '/' })
1010+ .register("/static/service-worker.js", { scope: "/" })
1111 .then((registration) => {
1212- console.log('[App] Service Worker registered:', registration);
1313-1212+ console.log("[App] Service Worker registered:", registration);
1313+1414 // Listen for updates
1515- registration.addEventListener('updatefound', () => {
1515+ registration.addEventListener("updatefound", () => {
1616 const newWorker = registration.installing;
1717- newWorker.addEventListener('statechange', () => {
1818- if (newWorker.state === 'installed' && navigator.serviceWorker.controller) {
1717+ newWorker.addEventListener("statechange", () => {
1818+ if (
1919+ newWorker.state === "installed" &&
2020+ navigator.serviceWorker.controller
2121+ ) {
1922 // New service worker available - notify user
2020- console.log('[App] New service worker available');
2323+ console.log("[App] New service worker available");
2124 // Dispatch event to show update notification
2222- window.dispatchEvent(new CustomEvent('sw-update-available'));
2525+ window.dispatchEvent(new CustomEvent("sw-update-available"));
2326 }
2427 });
2528 });
···3033 }, 60000);
3134 })
3235 .catch((err) => {
3333- console.error('[App] Service Worker registration failed:', err);
3636+ console.error("[App] Service Worker registration failed:", err);
3437 // Log additional context for debugging
3535- if (err instanceof DOMException && err.name === 'SecurityError') {
3636- console.warn('[App] Service Worker requires a secure context (HTTPS) or localhost');
3737- console.warn('[App] For development, access via http://localhost:18910 instead of 127.0.0.1');
3838+ if (err instanceof DOMException && err.name === "SecurityError") {
3939+ console.warn(
4040+ "[App] Service Worker requires a secure context (HTTPS) or localhost",
4141+ );
4242+ console.warn(
4343+ "[App] For development, access via http://localhost:18910 instead of 127.0.0.1",
4444+ );
3845 }
3946 });
4047 });
4148} else {
4242- console.warn('[App] Service Workers not supported in this browser');
4949+ console.warn("[App] Service Workers not supported in this browser");
4350}
44514552const app = new App({
4646- target: document.getElementById('app'),
5353+ target: document.getElementById("app"),
4754});
48554956export default app;
+8-15
frontend/src/routes/About.svelte
···4141 >
4242 </div>
43434444- <div
4545- class="bg-amber-50 border-l-4 border-amber-400 p-4 mb-6 rounded-r-lg"
4646- >
4444+ <div class="bg-amber-50 border-l-4 border-amber-400 p-4 mb-6 rounded-r-lg">
4745 <p class="text-sm text-brown-800">
4846 <strong>Alpha Software:</strong> Arabica is currently in early development.
4947 Features may change, and data structures could be modified in future updates.
···7371 </h3>
7472 <ul class="list-disc list-inside space-y-2 text-brown-800">
7573 <li>
7676- <strong>You own your data</strong> - All your brew logs live in your
7777- PDS, not our servers
7474+ <strong>You own your data</strong> - All your brew logs live in your PDS,
7575+ not our servers
7876 </li>
7977 <li>
8078 <strong>Portable identity</strong> - Switch PDS providers anytime without
···135133 The AT Protocol Advantage
136134 </h2>
137135 <p class="text-brown-800 leading-relaxed">
138138- The AT Protocol is a decentralized social networking protocol that
139139- gives users true ownership of their data and identity. When you use
140140- Arabica:
136136+ The AT Protocol is a decentralized social networking protocol that gives
137137+ users true ownership of their data and identity. When you use Arabica:
141138 </p>
142139 <ul class="list-disc list-inside space-y-2 text-brown-800 mt-3">
143140 <li>
144144- Your brew data is stored as ATProto records in collections on your
145145- PDS
141141+ Your brew data is stored as ATProto records in collections on your PDS
146142 </li>
147143 <li>You authenticate via OAuth with your PDS, not with us</li>
148144 <li>
149149- References between records (like linking a brew to a bean) use
150150- AT-URIs
145145+ References between records (like linking a brew to a bean) use AT-URIs
151146 </li>
152147 <li>
153148 Your identity is portable - change PDS providers without losing your
···159154 <section
160155 class="bg-gradient-to-br from-amber-50 to-brown-100 border-2 border-brown-300 p-6 rounded-xl shadow-lg"
161156 >
162162- <h3 class="text-xl font-semibold text-brown-900 mb-3">
163163- Getting Started
164164- </h3>
157157+ <h3 class="text-xl font-semibold text-brown-900 mb-3">Getting Started</h3>
165158 <p class="text-brown-800 mb-4">
166159 To use Arabica, you'll need an account on a PDS that supports the AT
167160 Protocol. The easiest way is to create a Bluesky account at <a