diff --git a/Makefile b/Makefile
index 6a6b8a2a..440e0834 100644
--- a/Makefile
+++ b/Makefile
@@ -34,7 +34,8 @@ ci: version install check app test node-all-platforms ci-upload-node android ci-
.PHONY: android
android: app
- cd ./js/app/android \
+ export NODE_ENV=production \
+ && cd ./js/app/android \
&& ./gradlew build \
&& cd - \
&& mv ./js/app/android/app/build/outputs/apk/release/app-release.apk ./bin/aquareum-$(VERSION)-android-release.apk \
diff --git a/go.mod b/go.mod
index 66a1a9f6..eb4c48d2 100644
--- a/go.mod
+++ b/go.mod
@@ -8,6 +8,7 @@ require (
github.com/lmittmann/tint v1.0.4
github.com/orandin/slog-gorm v1.3.2
github.com/peterbourgon/ff/v3 v3.3.1
+ github.com/samber/slog-http v1.4.0
github.com/stretchr/testify v1.9.0
golang.org/x/sync v0.6.0
gorm.io/driver/sqlite v1.5.5
@@ -27,3 +28,9 @@ require (
github.com/pmezard/go-difflib v1.0.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
)
+
+require (
+ github.com/google/uuid v1.6.0 // indirect
+ go.opentelemetry.io/otel v1.19.0 // indirect
+ go.opentelemetry.io/otel/trace v1.19.0 // indirect
+)
diff --git a/go.sum b/go.sum
index cb281d03..d40e0d33 100644
--- a/go.sum
+++ b/go.sum
@@ -7,6 +7,8 @@ github.com/golang/glog v1.2.0 h1:uCdmnmatrKCgMBlM4rMuJZWOkPDqdbZPnrMXDY4gI68=
github.com/golang/glog v1.2.0/go.mod h1:6AhwSGph0fcJtXVM/PEHPqZlFeoLxhs7/t5UDAwmO+w=
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
+github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
+github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
@@ -23,10 +25,16 @@ github.com/peterbourgon/ff/v3 v3.3.1 h1:XSWvXxeNdgeppLNGGJEAOiXRdX2YMF/LuZfdnqQ1
github.com/peterbourgon/ff/v3 v3.3.1/go.mod h1:zjJVUhx+twciwfDl0zBcFzl4dW8axCRyXE/eKY9RztQ=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/samber/slog-http v1.4.0 h1:s2hSzMlQBFDIPTUBDm6G+SGfv7F4xR9q8edjxtY6aho=
+github.com/samber/slog-http v1.4.0/go.mod h1:n6h4x2ZBeTgLqMKf95EuNlU6mcJF1b/RVLxo1od5+V0=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs=
+go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY=
+go.opentelemetry.io/otel/trace v1.19.0 h1:DFVQmlVbfVeOuBRrwdtaehRrWiL1JoVs9CPIQ1Dzxpg=
+go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo=
golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ=
golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
diff --git a/hack/push.mjs b/hack/push.mjs
new file mode 100644
index 00000000..3eb48235
--- /dev/null
+++ b/hack/push.mjs
@@ -0,0 +1,25 @@
+import admin from "firebase-admin";
+import fs from "fs";
+
+const serviceAccount = JSON.parse(
+ fs.readFileSync(`${process.env.AQKEYS}/firebase-admin.json`, "utf8"),
+);
+
+admin.initializeApp({
+ credential: admin.credential.cert(serviceAccount),
+});
+
+(async () => {
+ const res = await admin.messaging().sendMulticast({
+ tokens: process.argv.slice(2),
+ notification: {
+ title: "Basic Notification",
+ body: "This is a basic notification sent from the server!",
+ // imageUrl: "https://my-cdn.com/app-logo.png",
+ },
+ android: {
+ priority: "high",
+ },
+ });
+ console.log(JSON.stringify(res));
+})();
diff --git a/js/app/.env.development b/js/app/.env.development
new file mode 100644
index 00000000..55d1f761
--- /dev/null
+++ b/js/app/.env.development
@@ -0,0 +1,2 @@
+EXPO_PUBLIC_AQUAREUM_URL=http://localhost:8080
+EXPO_USE_METRO_WORKSPACE_ROOT=1
\ No newline at end of file
diff --git a/js/app/.env.production b/js/app/.env.production
new file mode 100644
index 00000000..ca52c778
--- /dev/null
+++ b/js/app/.env.production
@@ -0,0 +1,2 @@
+EXPO_PUBLIC_AQUAREUM_URL=https://aquareum.tv
+EXPO_USE_METRO_WORKSPACE_ROOT=0
\ No newline at end of file
diff --git a/js/app/.gitignore b/js/app/.gitignore
index 3e9e296d..0673a11f 100644
--- a/js/app/.gitignore
+++ b/js/app/.gitignore
@@ -53,3 +53,4 @@ apps/studio/types/**
tamagui-web.css
android/app/src/main/assets
+ios/Aquareum.xcworkspace/xcshareddata
diff --git a/js/app/GoogleService-Info.plist b/js/app/GoogleService-Info.plist
new file mode 100644
index 00000000..c7128a55
--- /dev/null
+++ b/js/app/GoogleService-Info.plist
@@ -0,0 +1,30 @@
+
+
+
+
+ API_KEY
+ AIzaSyACfGDkEbxUnr_vsltGvZNIAyoUy5U4K6w
+ GCM_SENDER_ID
+ 881925734448
+ PLIST_VERSION
+ 1
+ BUNDLE_ID
+ tv.aquareum
+ PROJECT_ID
+ aquareum-tv
+ STORAGE_BUCKET
+ aquareum-tv.appspot.com
+ IS_ADS_ENABLED
+
+ IS_ANALYTICS_ENABLED
+
+ IS_APPINVITE_ENABLED
+
+ IS_GCM_ENABLED
+
+ IS_SIGNIN_ENABLED
+
+ GOOGLE_APP_ID
+ 1:881925734448:ios:7c0a7b43219f309e40edf5
+
+
\ No newline at end of file
diff --git a/js/app/android/app/build.gradle b/js/app/android/app/build.gradle
index a318ebed..9a798ed2 100644
--- a/js/app/android/app/build.gradle
+++ b/js/app/android/app/build.gradle
@@ -170,3 +170,5 @@ dependencies {
apply from: new File(["node", "--print", "require.resolve('@react-native-community/cli-platform-android/package.json', { paths: [require.resolve('react-native/package.json')] })"].execute(null, rootDir).text.trim(), "../native_modules.gradle");
applyNativeModulesAppBuildGradle(project)
+
+apply plugin: 'com.google.gms.google-services'
\ No newline at end of file
diff --git a/js/app/android/app/google-services.json b/js/app/android/app/google-services.json
new file mode 100644
index 00000000..8bb2aaaf
--- /dev/null
+++ b/js/app/android/app/google-services.json
@@ -0,0 +1,29 @@
+{
+ "project_info": {
+ "project_number": "881925734448",
+ "project_id": "aquareum-tv",
+ "storage_bucket": "aquareum-tv.appspot.com"
+ },
+ "client": [
+ {
+ "client_info": {
+ "mobilesdk_app_id": "1:881925734448:android:07710b8baa75c6dd40edf5",
+ "android_client_info": {
+ "package_name": "tv.aquareum"
+ }
+ },
+ "oauth_client": [],
+ "api_key": [
+ {
+ "current_key": "AIzaSyAR7VBxreSy2UlSBSd8kRQC9kMHdXg3mgA"
+ }
+ ],
+ "services": {
+ "appinvite_service": {
+ "other_platform_oauth_client": []
+ }
+ }
+ }
+ ],
+ "configuration_version": "1"
+}
diff --git a/js/app/android/app/src/main/AndroidManifest.xml b/js/app/android/app/src/main/AndroidManifest.xml
index 8357a19d..d5393320 100644
--- a/js/app/android/app/src/main/AndroidManifest.xml
+++ b/js/app/android/app/src/main/AndroidManifest.xml
@@ -1,6 +1,8 @@
-
+
+
+
diff --git a/js/app/android/app/src/main/res/values/styles.xml b/js/app/android/app/src/main/res/values/styles.xml
index f03e23f8..ab7cb49e 100644
--- a/js/app/android/app/src/main/res/values/styles.xml
+++ b/js/app/android/app/src/main/res/values/styles.xml
@@ -4,7 +4,7 @@
- @style/ResetEditText
- @drawable/rn_edit_text_material
- @color/colorPrimary
- - @color/colorPrimaryDark
+ - #ffffff