Compare commits

..

51 Commits

Author SHA1 Message Date
Neeraj Gupta
8378af153b Tweak 2025-07-28 10:31:39 +05:30
Neeraj Gupta
7f57fd597c Tweak order 2025-07-28 10:24:58 +05:30
Neeraj Gupta
f7515f520c Update 2025-07-28 10:22:29 +05:30
Neeraj Gupta
b0ebbce292 Remove code magic 2025-07-28 10:09:54 +05:30
Neeraj Gupta
3d409ffd77 Try adding existing cert 2025-07-28 09:49:31 +05:30
Neeraj Gupta
6d45c3c4e5 Fix 7/n 2025-07-26 15:31:28 +05:30
Neeraj Gupta
35ca600c4e Fix 5/n 2025-07-26 15:19:24 +05:30
Neeraj Gupta
6fcf2732a8 Merge branch 'internal_photos_july25_2' into internal_ios_build 2025-07-26 15:11:57 +05:30
Neeraj Gupta
311e8f3939 Fix 5/n 2025-07-26 15:10:38 +05:30
Neeraj Gupta
da1ff4131c Fix build 4/n 2025-07-26 15:02:01 +05:30
Prateek Sunal
d0bbdfec8e chore: bump version 2025-07-26 14:58:41 +05:30
Prateek Sunal
e5f2ae8ac8 Merge remote-tracking branch 'origin/smart-album-nothingelse' into internal_photos_july25_2 2025-07-26 14:58:17 +05:30
Neeraj Gupta
a119babe21 Fix build 4/n 2025-07-26 14:57:07 +05:30
Neeraj Gupta
9dd9a8db80 Fix build 3/n 2025-07-26 14:52:29 +05:30
Neeraj Gupta
ea4282882e Fix build 2/n 2025-07-26 14:45:42 +05:30
Neeraj Gupta
862064d2e4 Fix build 2/n 2025-07-26 14:42:58 +05:30
ashilkn
191ec62215 bump up version 2025-07-26 14:31:20 +05:30
Neeraj Gupta
dabd703803 Fix build 1/n 2025-07-26 14:31:05 +05:30
ashilkn
be6bc3747b Merge gallery_rewrite 2025-07-26 14:30:35 +05:30
Neeraj Gupta
9f9eab3644 Update build workflow 2025-07-26 14:22:15 +05:30
Neeraj Gupta
91499c7775 Merge remote-tracking branch 'origin/main' into internal_photos_july25_2 2025-07-26 14:07:52 +05:30
AmanRajSinghMourya
f254a7841b Merge branch 'advance_image_editor' into internal_photos_july25_2 2025-07-26 00:18:50 +05:30
Prateek Sunal
e583794d37 Merge remote-tracking branch 'origin/main' into internal_photos_july25_2 2025-07-25 20:01:43 +05:30
Prateek Sunal
87df2add67 Merge branch 'internal_photos_july25_2' of https://github.com/ente-io/ente into internal_photos_july25_2 2025-07-25 20:01:28 +05:30
Prateek Sunal
c074f66b38 Merge branch 'smart-album-nothingelse' into internal_photos_july25_2 2025-07-25 20:01:20 +05:30
ashilkn
9bdf6305f7 Merge gallery_rewrite 2025-07-25 16:39:56 +05:30
ashilkn
e13e27c10e Merge branch 'gallery_rewrite' into internal_photos_july25_2 2025-07-25 16:14:49 +05:30
ashilkn
d1d7d03af2 Merge branch 'gallery_rewrite' into internal_photos_july25_2 2025-07-25 16:12:57 +05:30
Prateek Sunal
ba2cf287ce chore: push changes 2025-07-25 14:08:29 +05:30
Prateek Sunal
619d7676f6 Merge branch 'smart-album-nothingelse' into internal_photos_july25_2 2025-07-25 14:08:14 +05:30
Prateek Sunal
0d7cbd3187 chore: bump version 2025-07-25 13:05:05 +05:30
Prateek Sunal
a292d09d8c Merge branch 'smart-album-nothingelse' into internal_photos_july25_2 2025-07-25 13:04:45 +05:30
ashilkn
7450996f4d Merge branch 'gallery_rewrite' into internal_photos_july25_2 2025-07-24 20:13:05 +05:30
ashilkn
f37d94a2bd Merge branch 'gallery_rewrite' into internal_photos_july25_2 2025-07-24 19:49:38 +05:30
ashilkn
d48b4392f5 Merge branch 'gallery_rewrite' into internal_photos_july25_2 2025-07-24 19:45:45 +05:30
ashilkn
8feb69d711 Merge branch 'gallery_rewrite' into internal_photos_july25_2 2025-07-24 19:24:12 +05:30
Neeraj Gupta
24266e9eca Bump version 2025-07-24 17:23:42 +05:30
Neeraj Gupta
3419197817 Merge branch 'fixNow' into internal_photos_july25_2 2025-07-24 17:23:11 +05:30
Neeraj Gupta
6d59e51ffa Bump version 2025-07-24 16:26:38 +05:30
Neeraj Gupta
16bc189c2b Merge branch 'fixQuery' into internal_photos_july25_2 2025-07-24 16:25:39 +05:30
ashilkn
c942257c5f bump up version 2025-07-24 14:55:54 +05:30
ashilkn
bc7d265812 Fix build error 2025-07-24 14:52:38 +05:30
ashilkn
f7ee1099c4 Merge flutter_3.27 2025-07-24 14:45:32 +05:30
ashilkn
f6852885b1 Change from flutter pub get 2025-07-24 14:39:34 +05:30
ashilkn
ee1686370b Merge branch 'flutter_3.27' into internal_photos_july25_2 2025-07-24 14:07:49 +05:30
ashilkn
c94e817205 update README file 2025-07-24 14:05:46 +05:30
ashilkn
4669107647 Update workflows 2025-07-24 14:05:26 +05:30
ashilkn
dcf0192257 Resolve merge conflicts and merge gallery_rewrite 2025-07-24 14:00:14 +05:30
ashilkn
a0686dc8bd Regenerate pubspec.lock after upgrading to flutter 3.27.4 2025-07-24 13:42:08 +05:30
ashilkn
506fc51675 Merge remote-tracking branch 'origin/advance_image_editor' into internal_photos_july25_2 2025-07-24 12:30:28 +05:30
ashilkn
6751648aae Merge remote-tracking branch 'origin/smart-album-nothingelse' into internal_photos_july25_2 2025-07-24 12:26:56 +05:30
1750 changed files with 75776 additions and 166151 deletions

View File

@@ -5,7 +5,7 @@ on:
branches: [main]
paths:
# Run workflow when auth's intl_en.arb is changed
- "mobile/apps/auth/lib/l10n/arb/app_en.arb"
- "auth/lib/l10n/arb/app_en.arb"
# Or the workflow itself is changed
- ".github/workflows/auth-crowdin.yml"

View File

@@ -4,7 +4,7 @@ on:
workflow_dispatch: # Allow manually running the action
env:
FLUTTER_VERSION: "3.32.8"
FLUTTER_VERSION: "3.24.3"
permissions:
contents: write

View File

@@ -4,11 +4,11 @@ on:
# Run on every pull request (open or push to it) that changes auth/
pull_request:
paths:
- "mobile/apps/auth/**"
- "auth/**"
- ".github/workflows/auth-lint.yml"
env:
FLUTTER_VERSION: "3.32.8"
FLUTTER_VERSION: "3.24.3"
permissions:
contents: read

View File

@@ -29,7 +29,7 @@ on:
- "auth-v*"
env:
FLUTTER_VERSION: "3.32.8"
FLUTTER_VERSION: "3.24.3"
permissions:
contents: write

View File

@@ -1,179 +0,0 @@
name: "Internal release (photos)"
on:
schedule:
# Runs daily at 12:30 UTC (6:00 PM IST)
- cron: "30 12 * * *"
workflow_dispatch: # Allow manual trigger
env:
FLUTTER_VERSION: "3.32.8"
RUST_VERSION: "1.86.0"
permissions:
contents: read
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: mobile/apps/photos
steps:
- name: Checkout code and submodules
uses: actions/checkout@v4
with:
submodules: recursive
- name: Free up disk space
run: |
echo "Initial disk usage:"
df -h /
# Get available space in KB
INITIAL=$(df / | awk 'NR==2 {print $4}')
echo -e "\n=== Removing .NET SDK (~20-25GB) ==="
BEFORE=$(df / | awk 'NR==2 {print $4}')
START=$(date +%s)
sudo rm -rf /usr/share/dotnet
END=$(date +%s)
AFTER=$(df / | awk 'NR==2 {print $4}')
FREED=$(( (AFTER - BEFORE) / 1048576 )) # Convert KB to GB
echo "Time: $((END-START))s | Freed: ${FREED}GB"
echo -e "\n=== Removing cached tools (~5-10GB) ==="
BEFORE=$(df / | awk 'NR==2 {print $4}')
START=$(date +%s)
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
END=$(date +%s)
AFTER=$(df / | awk 'NR==2 {print $4}')
FREED=$(( (AFTER - BEFORE) / 1048576 ))
echo "Time: $((END-START))s | Freed: ${FREED}GB"
echo -e "\n=== Final Summary ==="
FINAL=$(df / | awk 'NR==2 {print $4}')
TOTAL_FREED=$(( (FINAL - INITIAL) / 1048576 ))
echo "Total space freed: ${TOTAL_FREED}GB"
echo "Final disk usage:"
df -h /
- name: Setup JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Install Flutter ${{ env.FLUTTER_VERSION }}
uses: subosito/flutter-action@v2
with:
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Install Flutter Rust Bridge
run: cargo install flutter_rust_bridge_codegen
- name: Generate Rust bindings
run: flutter_rust_bridge_codegen generate
- name: Increment version code for build
run: |
CURRENT_VERSION=$(grep '^version:' pubspec.yaml | sed 's/version: //')
VERSION_NAME=$(echo $CURRENT_VERSION | cut -d'+' -f1)
CURRENT_BUILD=$(echo $CURRENT_VERSION | cut -d'+' -f2)
NEW_BUILD=$((CURRENT_BUILD + ${{ github.run_number }}))
NEW_VERSION="${VERSION_NAME}+${NEW_BUILD}"
sed -i "s/^version: .*/version: $NEW_VERSION/" pubspec.yaml
echo "Building with version ${NEW_VERSION}"
# Store version for later use
echo "NEW_VERSION=${NEW_VERSION}" >> $GITHUB_ENV
- name: Prepare and validate changelog for Play Store
run: |
mkdir -p whatsnew
CHANGELOG_FILE="scripts/store_changes.txt"
DISCORD_FILE="scripts/internal_changes.txt"
OUTPUT_FILE="whatsnew/whatsnew-en-US"
# Use provided changelog or fallback
if [ -f "$CHANGELOG_FILE" ]; then
head -c 500 "$CHANGELOG_FILE" > "$OUTPUT_FILE"
else
echo "Bug fixes and improvements" > "$OUTPUT_FILE"
fi
# Validate: file exists
if [ ! -s "$OUTPUT_FILE" ]; then
echo "❌ Changelog is empty."
exit 1
fi
# Validate: <= 500 chars
LENGTH=$(wc -m < "$OUTPUT_FILE")
if [ "$LENGTH" -gt 500 ]; then
echo "❌ Changelog exceeds 500 characters ($LENGTH)."
exit 1
fi
# Validate: no markdown or HTML
if grep -Eq '[\*\_\<\>\[\]\(\)]' "$OUTPUT_FILE"; then
echo "❌ Changelog contains markdown/HTML formatting."
exit 1
fi
echo "✅ Changelog valid:"
cat "$OUTPUT_FILE"
# Store changelog for Play Store (with escaped newlines)
CHANGELOG_PLAYSTORE=$(cat "$OUTPUT_FILE" | sed ':a;N;$!ba;s/\n/\\n/g' | sed 's/"/\\"/g')
echo "CHANGELOG=${CHANGELOG_PLAYSTORE}" >> $GITHUB_ENV
# Store changelog for Discord (with proper newlines)
CHANGELOG_DISCORD=$(cat "$DISCORD_FILE" | sed 's/"/\\"/g')
echo "CHANGELOG_DISCORD<<EOF" >> $GITHUB_ENV
echo "$CHANGELOG_DISCORD" >> $GITHUB_ENV
echo "EOF" >> $GITHUB_ENV
- name: Setup keys
uses: timheuer/base64-to-file@v1
with:
fileName: "keystore/ente_photos_key.jks"
encodedString: ${{ secrets.SIGNING_KEY_PHOTOS }}
- name: Build PlayStore AAB
run: |
flutter build appbundle --dart-define=cronetHttpNoPlay=true --release --flavor playstore
env:
SIGNING_KEY_PATH: "/home/runner/work/_temp/keystore/ente_photos_key.jks"
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS_PHOTOS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD_PHOTOS }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD_PHOTOS }}
- name: Upload AAB to PlayStore
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
packageName: io.ente.photos
releaseFiles: mobile/apps/photos/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
track: internal
whatsNewDirectory: mobile/apps/photos/whatsnew
mappingFile: mobile/apps/photos/build/app/outputs/mapping/playstoreRelease/mapping.txt
- name: Notify Discord
uses: sarisia/actions-status-discord@v1
with:
webhook: ${{ secrets.DISCORD_INTERNAL_RELEASE_WEBHOOK }}
nodetail: true
title: "🏆 Daily release Photos v${{ env.NEW_VERSION }} (Branch: ${{ github.ref_name }})"
description: |
**Version:** ${{ env.NEW_VERSION }}
**Flutter:** ${{ env.FLUTTER_VERSION }}
**Commit:** [${{ github.sha }}](${{ github.server_url }}/${{ github.repository }}/commit/${{ github.sha }})
**Download:** [Play Store](https://play.google.com/store/apps/details?id=io.ente.photos)
**Changes:**
${{ env.CHANGELOG_DISCORD }}
color: 0x00ff00

View File

@@ -0,0 +1,77 @@
name: "Internal release (photos)"
on:
workflow_dispatch: # Allow manually running the action
env:
FLUTTER_VERSION: "3.24.3"
RUST_VERSION: "1.85.1"
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: mobile/apps/photos
steps:
- name: Checkout code and submodules
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Install Flutter ${{ env.FLUTTER_VERSION }}
uses: subosito/flutter-action@v2
with:
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Install Rust ${{ env.RUST_VERSION }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_VERSION }}
- name: Install Flutter Rust Bridge
run: cargo install flutter_rust_bridge_codegen
- name: Setup keys
uses: timheuer/base64-to-file@v1
with:
fileName: "keystore/ente_photos_key.jks"
encodedString: ${{ secrets.SIGNING_KEY_PHOTOS }}
- name: Build PlayStore AAB
run: |
flutter build appbundle --dart-define=cronetHttpNoPlay=true --release --flavor playstore
env:
SIGNING_KEY_PATH: "/home/runner/work/_temp/keystore/ente_photos_key.jks"
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS_PHOTOS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD_PHOTOS }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD_PHOTOS }}
- name: Upload AAB to PlayStore
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
packageName: io.ente.photos
releaseFiles: mobile/apps/photos/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
track: internal
- name: Notify Discord
uses: sarisia/actions-status-discord@v1
with:
webhook: ${{ secrets.DISCORD_INTERNAL_RELEASE_WEBHOOK }}
nodetail: true
title: "🏆 Internal release available for Photos"
description: "[Download](https://play.google.com/store/apps/details?id=io.ente.photos)"
color: 0x00ff00

View File

@@ -0,0 +1,68 @@
name: "Internal release (photos)"
on:
workflow_dispatch: # Allow manually running the action
env:
FLUTTER_VERSION: "3.27.4"
permissions:
contents: write
jobs:
build:
runs-on: ubuntu-latest
defaults:
run:
working-directory: mobile/apps/photos
steps:
- name: Checkout code and submodules
uses: actions/checkout@v4
with:
submodules: recursive
- name: Setup JDK 17
uses: actions/setup-java@v1
with:
java-version: 17
- name: Install Flutter ${{ env.FLUTTER_VERSION }}
uses: subosito/flutter-action@v2
with:
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Setup keys
uses: timheuer/base64-to-file@v1
with:
fileName: "keystore/ente_photos_key.jks"
encodedString: ${{ secrets.SIGNING_KEY_PHOTOS }}
- name: Build PlayStore AAB
run: |
flutter build appbundle --dart-define=cronetHttpNoPlay=true --release --flavor playstore
env:
SIGNING_KEY_PATH: "/home/runner/work/_temp/keystore/ente_photos_key.jks"
SIGNING_KEY_ALIAS: ${{ secrets.SIGNING_KEY_ALIAS_PHOTOS }}
SIGNING_KEY_PASSWORD: ${{ secrets.SIGNING_KEY_PASSWORD_PHOTOS }}
SIGNING_STORE_PASSWORD: ${{ secrets.SIGNING_STORE_PASSWORD_PHOTOS }}
- name: Upload AAB to PlayStore
uses: r0adkll/upload-google-play@v1
with:
serviceAccountJsonPlainText: ${{ secrets.SERVICE_ACCOUNT_JSON }}
packageName: io.ente.photos
releaseFiles: mobile/apps/photos/build/app/outputs/bundle/playstoreRelease/app-playstore-release.aab
track: internal
- name: Notify Discord
uses: sarisia/actions-status-discord@v1
with:
webhook: ${{ secrets.DISCORD_INTERNAL_RELEASE_WEBHOOK }}
nodetail: true
title: "🏆 Internal release Photos (Branch: ${{ github.ref_name }})"
description: "[Download](https://play.google.com/store/apps/details?id=io.ente.photos)"
color: 0x00ff00

View File

@@ -8,8 +8,7 @@ on:
- ".github/workflows/mobile-lint.yml"
env:
FLUTTER_VERSION: "3.32.8"
RUST_VERSION: "1.86.0"
FLUTTER_VERSION: "3.27.4"
permissions:
contents: read
@@ -32,18 +31,7 @@ jobs:
channel: "stable"
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- run: flutter pub get
- name: Install Rust ${{ env.RUST_VERSION }}
uses: dtolnay/rust-toolchain@master
with:
toolchain: ${{ env.RUST_VERSION }}
- name: Install Flutter Rust Bridge
run: cargo install flutter_rust_bridge_codegen
- name: Generate Rust bindings
run: flutter_rust_bridge_codegen generate
- run: flutter analyze --no-fatal-infos

View File

@@ -9,7 +9,7 @@ on:
- "photos-v*"
env:
FLUTTER_VERSION: "3.32.8"
FLUTTER_VERSION: "3.27.4"
permissions:
contents: write
@@ -28,38 +28,6 @@ jobs:
with:
submodules: recursive
- name: Free up disk space
run: |
echo "Initial disk usage:"
df -h /
# Get available space in KB
INITIAL=$(df / | awk 'NR==2 {print $4}')
echo -e "\n=== Removing .NET SDK (~20-25GB) ==="
BEFORE=$(df / | awk 'NR==2 {print $4}')
START=$(date +%s)
sudo rm -rf /usr/share/dotnet
END=$(date +%s)
AFTER=$(df / | awk 'NR==2 {print $4}')
FREED=$(( (AFTER - BEFORE) / 1048576 )) # Convert KB to GB
echo "Time: $((END-START))s | Freed: ${FREED}GB"
echo -e "\n=== Removing cached tools (~5-10GB) ==="
BEFORE=$(df / | awk 'NR==2 {print $4}')
START=$(date +%s)
sudo rm -rf "$AGENT_TOOLSDIRECTORY"
END=$(date +%s)
AFTER=$(df / | awk 'NR==2 {print $4}')
FREED=$(( (AFTER - BEFORE) / 1048576 ))
echo "Time: $((END-START))s | Freed: ${FREED}GB"
echo -e "\n=== Final Summary ==="
FINAL=$(df / | awk 'NR==2 {print $4}')
TOTAL_FREED=$(( (FINAL - INITIAL) / 1048576 ))
echo "Total space freed: ${TOTAL_FREED}GB"
echo "Final disk usage:"
df -h /
- name: Setup JDK 17
uses: actions/setup-java@v1
with:
@@ -72,12 +40,6 @@ jobs:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Install Flutter Rust Bridge
run: cargo install flutter_rust_bridge_codegen
- name: Generate Rust bindings
run: flutter_rust_bridge_codegen generate
- name: Setup keys
uses: timheuer/base64-to-file@v1
with:

View File

@@ -4,12 +4,12 @@ on:
workflow_dispatch: # Manual trigger only
env:
FLUTTER_VERSION: "3.32.8"
FLUTTER_VERSION: "3.27.4"
ANDROID_KEYSTORE_PATH: "keystore/ente_photos_key.jks"
jobs:
build:
runs-on: macos-latest # Required for iOS builds
runs-on: macos-15 # Required for iOS builds
environment: "ios-build"
permissions:
contents: write
@@ -19,12 +19,50 @@ jobs:
working-directory: mobile/apps/photos
steps:
# Common Setup
- name: Checkout code
uses: actions/checkout@v4
with:
submodules: recursive
- name: Install Apple Certificate
env:
MAC_OS_CERTIFICATE: ${{ secrets.MAC_OS_CERTIFICATE }}
MAC_OS_CERTIFICATE_PASSWORD: ${{ secrets.MAC_OS_CERTIFICATE_PASSWORD }}
KEYCHAIN_PASSWORD: ${{ secrets.KEYCHAIN_PASSWORD }}
run: |
# Create variables
CERTIFICATE_PATH=$RUNNER_TEMP/build_certificate.p12
KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db
# Import certificate from secrets
echo -n "$MAC_OS_CERTIFICATE" | base64 --decode -o $CERTIFICATE_PATH
# Create temporary keychain
security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
security set-keychain-settings -lut 21600 $KEYCHAIN_PATH
security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# Import certificate to keychain
security import $CERTIFICATE_PATH -P "$MAC_OS_CERTIFICATE_PASSWORD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH
security set-key-partition-list -S apple-tool:,apple: -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH
# Make the keychain the default
security list-keychain -d user -s $KEYCHAIN_PATH
- name: Add provisioning profiles
run: |
# Decode and install all provisioning profiles
PROFILES_HOME="$HOME/Library/MobileDevice/Provisioning Profiles"
mkdir -p "$PROFILES_HOME"
IFS=$'\n'
for profile in ${{ secrets.MAC_OS_PROFILES_BASE64 }}; do
PROFILE_PATH="$(mktemp "$PROFILES_HOME"/$(uuidgen).mobileprovision)"
echo "$profile" | base64 --decode > "$PROFILE_PATH"
echo "Saved provisioning profile to $PROFILE_PATH"
done
# Common Setup
- name: Setup JDK 17
uses: actions/setup-java@v1
with:
@@ -35,8 +73,11 @@ jobs:
with:
flutter-version: ${{ env.FLUTTER_VERSION }}
cache: true
- name: Get Flutter dependencies
run: flutter pub get
# Android Build
# Android Build
- name: Setup Android signing key
uses: timheuer/base64-to-file@v1
with:
@@ -59,6 +100,16 @@ jobs:
- name: Install fastlane
run: gem install fastlane
- name: Update CocoaPods Specs
run: pod repo update
working-directory: mobile/apps/photos/ios
- name: Install CocoaPods dependencies
run: |
rm -f Podfile.lock
pod install
working-directory: mobile/apps/photos/ios
- name: Create ExportOptions.plist
run: |
cat <<EOF > ios/ExportOptions.plist
@@ -70,10 +121,23 @@ jobs:
<string>app-store</string>
<key>teamID</key>
<string>${{ secrets.IOS_TEAM_ID }}</string>
<key>provisioningProfiles</key>
<dict>
<key>io.ente.photos</key>
<string>match AppStore io.ente.photos</string>
<key>io.ente.frame</key>
<string>match AppStore io.ente.frame</string>
<key>io.ente.frame.EntePeopleWidget</key>
<string>match AppStore io.ente.frame.EntePeopleWidget</string>
<key>io.ente.frame.EnteAlbumWidget</key>
<string>match AppStore io.ente.frame.EnteAlbumWidget</string>
<key>io.ente.frame.EnteMemoryWidget</key>
<string>match AppStore io.ente.frame.EnteMemoryWidget</string>
</dict>
</dict>
</plist>
EOF
- name: Setup App Store Connect API Key
run: |
echo '${{ secrets.IOS_API_KEY }}' > api_key.json
@@ -83,7 +147,7 @@ jobs:
run: |
flutter build ipa \
--release \
--export-options-plist=ExportOptions.plist \
--export-options-plist=ios/ExportOptions.plist \
--dart-define=cronetHttpNoPlay=true
env:
SIGNING_TEAM_ID: ${{ secrets.IOS_TEAM_ID }}

View File

@@ -1,44 +0,0 @@
name: "Lint (rust)"
on:
# Run on every pull request (open or push to it) that changes rust/
pull_request:
paths:
- "rust/**"
- ".github/workflows/rust-lint.yml"
permissions:
contents: read
# Cancel in-progress lint runs when a new commit is pushed.
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
env:
RUSTFLAGS: -D warnings
jobs:
lint:
runs-on: ubuntu-latest
defaults:
run:
working-directory: rust
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Cache
uses: actions/cache@v4
with:
path: |
~/.cargo/registry
~/.cargo/git
target
key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
- run: cargo fmt --check
- run: cargo clippy --all-targets --all-features
- run: cargo build

View File

@@ -29,8 +29,6 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Setup node and enable yarn caching
uses: actions/setup-node@v4
@@ -40,7 +38,7 @@ jobs:
cache-dependency-path: "web/yarn.lock"
- name: Install dependencies
run: yarn install --frozen-lockfile
run: yarn install
- name: Build ${{ inputs.app }}
run: yarn build:${{ inputs.app }}

View File

@@ -29,8 +29,6 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Setup node and enable yarn caching
uses: actions/setup-node@v4
@@ -40,7 +38,7 @@ jobs:
cache-dependency-path: "web/yarn.lock"
- name: Install dependencies
run: yarn install --frozen-lockfile
run: yarn install
- name: Build ${{ inputs.app }}
run: yarn build:${{ inputs.app }}

View File

@@ -37,7 +37,6 @@ jobs:
uses: actions/checkout@v4
with:
ref: ${{ steps.select-branch.outputs.branch }}
persist-credentials: false
- name: Setup node and enable yarn caching
uses: actions/setup-node@v4
@@ -47,7 +46,7 @@ jobs:
cache-dependency-path: "web/yarn.lock"
- name: Install dependencies
run: yarn install --frozen-lockfile
run: yarn install
- name: Build photos
run: yarn build:photos

View File

@@ -33,8 +33,6 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Setup node and enable yarn caching
uses: actions/setup-node@v4
@@ -44,15 +42,7 @@ jobs:
cache-dependency-path: "web/yarn.lock"
- name: Install dependencies
run: yarn install --frozen-lockfile
- name: Audit dependencies
run: |
yarn audit --level critical || exit_code=$?
if [[ $exit_code -ge 16 ]]; then
echo "::error::Yarn audit found critical issues"
exit 1
fi
run: yarn install
- name: Build photos
run: yarn build:photos
@@ -64,18 +54,6 @@ jobs:
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/photos web/apps/photos/out
- name: Build custom-albums
run: yarn build:photos
env:
NEXT_PUBLIC_ENTE_ONLY_SERVE_ALBUMS_APP: 1
- name: Publish custom-albums
uses: cloudflare/wrangler-action@v3
with:
accountId: ${{ secrets.CLOUDFLARE_ACCOUNT_ID }}
apiToken: ${{ secrets.CLOUDFLARE_API_TOKEN }}
command: pages deploy --project-name=ente --commit-dirty=true --branch=deploy/custom-albums web/apps/photos/out
- name: Build accounts
run: yarn build:accounts

View File

@@ -24,8 +24,6 @@ jobs:
steps:
- name: Checkout code
uses: actions/checkout@v4
with:
persist-credentials: false
- name: Setup node and enable yarn caching
uses: actions/setup-node@v4
@@ -34,14 +32,6 @@ jobs:
cache: "yarn"
cache-dependency-path: "web/yarn.lock"
- run: yarn install --frozen-lockfile
- run: yarn install
- run: yarn lint
- name: Audit dependencies
run: |
yarn audit --level critical || exit_code=$?
if [[ $exit_code -ge 16 ]]; then
echo "::error::Yarn audit found critical issues"
exit 1
fi

View File

@@ -48,11 +48,7 @@ See [docs/](docs/README.md) for how to edit these documents.
## Code contributions
If you'd like to contribute code, it is best to start small. Consider some well-scoped changes, say like adding more [custom icons to auth](mobile/apps/auth/docs/adding-icons.md), or fixing a specific bug. There is a (possibly outdated) list of tasks with the ["help wanted" or "good first issue"](<https://github.com/ente-io/ente/issues?q=state%3Aopen%20(label%3A%22good%20first%20issue%22%20OR%20label%3A%22help%20wanted%22%20)>) label too.
If you use any form of AI assistance, please include a co-author attribution in the commit for transparency.
In your PR, please include before / after screenshots, and clearly indicate the tests that you performed.
If you'd like to contribute code, it is best to start small. Consider some well-scoped changes, say like adding more [custom icons to auth](auth/docs/adding-icons.md), or fixing a specific bug.
Code that changes the behaviour of the product might not get merged, at least not initially. The PR can serve as a discussion bed, but you might find it easier to just start a discussion instead, or post your perspective in the (likely) existing thread about the behaviour change or new feature you wish for.

View File

@@ -142,22 +142,6 @@ var _updateFreeUserStorage = &cobra.Command{
},
}
var _sendMail = &cobra.Command{
Use: "send-mail <to-email> <from-email> <from-name>",
Args: cobra.ExactArgs(3),
Short: "Sends a test mail via the admin api",
RunE: func(cmd *cobra.Command, args []string) error {
recoverWithLog()
var flags = &model.AdminActionForUser{}
cmd.Flags().VisitAll(func(f *pflag.Flag) {
if f.Name == "admin-user" {
flags.AdminEmail = f.Value.String()
}
})
return ctrl.SendTestMail(context.Background(), *flags, args[0], args[1], args[2])
},
}
func init() {
rootCmd.AddCommand(_adminCmd)
_ = _userDetailsCmd.MarkFlagRequired("admin-user")
@@ -175,6 +159,5 @@ func init() {
_updateFreeUserStorage.Flags().StringP("user", "u", "", "The email of the user to update subscription for. (required)")
// add a flag with no value --no-limit
_updateFreeUserStorage.Flags().String("no-limit", "True", "When true, sets 100TB as storage limit, and expiry to current date + 100 years")
_sendMail.Flags().StringP("admin-user", "a", "", "The email of the admin user. ")
_adminCmd.AddCommand(_userDetailsCmd, _disable2faCmd, _disablePasskeyCmd, _updateFreeUserStorage, _listUsers, _deleteUser, _sendMail)
_adminCmd.AddCommand(_userDetailsCmd, _disable2faCmd, _disablePasskeyCmd, _updateFreeUserStorage, _listUsers, _deleteUser)
}

View File

@@ -2,11 +2,10 @@ package cmd
import (
"fmt"
"os"
"runtime"
"github.com/ente-io/cli/pkg"
"github.com/spf13/cobra/doc"
"os"
"runtime"
"github.com/spf13/viper"
@@ -21,6 +20,11 @@ var ctrl *pkg.ClICtrl
var rootCmd = &cobra.Command{
Use: "ente",
Short: "CLI tool for exporting your photos from ente.io",
// Uncomment the following line if your bare application
// has an action associated with it:
Run: func(cmd *cobra.Command, args []string) {
fmt.Sprintf("Hello World")
},
}
func GenerateDocs() error {

View File

@@ -139,28 +139,5 @@ func (c *Client) UpdateFreePlanSub(ctx context.Context, userDetails *models.User
}
}
return nil
}
func (c *Client) SendTestMail(ctx context.Context, toEmail, fromEmail, fromName string) error {
body := map[string]interface{}{
"to": []string{toEmail},
"fromName": fromName,
"fromEmail": fromEmail,
"subject": "Test mail from Ente",
"body": "This is a test mail from Ente",
}
r, err := c.restClient.R().
SetContext(ctx).
SetBody(body).
Post("/admin/mail")
if err != nil {
return err
}
if r.IsError() {
return &ApiError{
StatusCode: r.StatusCode(),
Message: r.String(),
}
}
return nil
}

View File

@@ -156,23 +156,6 @@ func (c *ClICtrl) UpdateFreeStorage(ctx context.Context, params model.AdminActio
return nil
}
func (c *ClICtrl) SendTestMail(ctx context.Context, params model.AdminActionForUser, to, from, fromName string) error {
accountCtx, err := c.buildAdminContext(ctx, params.AdminEmail)
if err != nil {
return err
}
err = c.Client.SendTestMail(accountCtx, to, from, fromName)
if err != nil {
if apiErr, ok := err.(*api.ApiError); ok && apiErr.StatusCode == 400 && strings.Contains(apiErr.Message, "Token is too old") {
fmt.Printf("Error: old admin token, please re-authenticate using `ente account add` \n")
return nil
}
return err
}
fmt.Printf("Successfully sent test email to %s\n", to)
return nil
}
func (c *ClICtrl) buildAdminContext(ctx context.Context, adminEmail string) (context.Context, error) {
accounts, err := c.GetAccounts(ctx)
if err != nil {

View File

@@ -44,7 +44,8 @@ jobs:
# If triggered by a tag, checkout photosd-$tag from the source
# repository. Otherwise checkout $source (default: "main").
repository: ente-io/ente
ref: "${{ startsWith(github.ref, 'refs/tags/v') &&
ref:
"${{ startsWith(github.ref, 'refs/tags/v') &&
format('photosd-{0}', github.ref_name) || ( inputs.source
|| 'main' ) }}"
@@ -109,7 +110,8 @@ jobs:
env:
# macOS notarization credentials key details
APPLE_ID: ${{ secrets.APPLE_ID }}
APPLE_APP_SPECIFIC_PASSWORD: ${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_APP_SPECIFIC_PASSWORD:
${{ secrets.APPLE_APP_SPECIFIC_PASSWORD }}
APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }}
# Windows Azure Trusted Signing related values
# https://www.electron.build/code-signing-win#using-azure-trusted-signing-beta

View File

@@ -1,5 +1,6 @@
{
"tabWidth": 4,
"proseWrap": "always",
"objectWrap": "collapse",
"plugins": [
"prettier-plugin-organize-imports",

View File

@@ -2,8 +2,6 @@
## v1.7.15 (Unreleased)
- Custom domains.
- Support Czech translations.
- .
## v1.7.14

View File

@@ -1,3 +1,4 @@
{
"tabWidth": 4
"tabWidth": 4,
"proseWrap": "always"
}

View File

@@ -26,10 +26,6 @@ export const sidebar = [
text: "Collecting photos",
link: "/photos/features/collect",
},
{
text: "Custom domains",
link: "/photos/features/custom-domains/",
},
{
text: "Deduplicate",
link: "/photos/features/deduplicate",
@@ -346,17 +342,13 @@ export const sidebar = [
text: "General",
link: "/self-hosting/troubleshooting/misc",
},
{
text: "Docker / quickstart",
link: "/self-hosting/troubleshooting/docker",
},
{
text: "Uploads",
link: "/self-hosting/troubleshooting/uploads",
},
{
text: "Ente CLI",
link: "/self-hosting/troubleshooting/cli",
text: "Docker / quickstart",
link: "/self-hosting/troubleshooting/docker",
},
],
},

View File

@@ -1,6 +1,7 @@
---
title: Migrating to Ente Auth
description: Guides for migrating your existing 2FA tokens into or out of Ente Auth
description:
Guides for migrating your existing 2FA tokens into or out of Ente Auth
---
# Migrating to/from Ente Auth

View File

View File

@@ -1,6 +1,7 @@
---
title: Desktop app FAQ
description: An assortment of frequently asked questions about Ente Photos desktop app
description:
An assortment of frequently asked questions about Ente Photos desktop app
---
# Desktop app FAQ

View File

@@ -67,7 +67,7 @@ reliable as any one can be.
If you would like to fund the development of this project, please consider
[subscribing](https://ente.io/download).
## How do I pronounce Ente?
## How do I pronounce ente?
It's like cafe 😊. kaf-_ay_. en-_tay_.

View File

@@ -1,6 +1,7 @@
---
title: Security and Privacy FAQ
description: Comprehensive information about security and privacy measures in Ente Photos
description:
Comprehensive information about security and privacy measures in Ente Photos
---
# Security and Privacy FAQ

View File

@@ -1,6 +1,7 @@
---
title: Cast
description: Casting your photos on to a large screen or a TV or a Chromecast device
description:
Casting your photos on to a large screen or a TV or a Chromecast device
---
# Cast

Binary file not shown.

Before

Width:  |  Height:  |  Size: 74 KiB

View File

@@ -1,109 +0,0 @@
---
title: Custom domains
description: Use your own domain when sharing photos and videos stored in Ente Photos
---
# Custom domains
Custom domains allow you to serve your public links with your own personalized domain.
For example, if I have an Ente album and wish to share it with my friends, I can go to the album's sharing settings and create a public link. When I copy this link, it will of the form of
```
https://albums.ente.io/?t=...
```
The custom domains feature allows you to instead create a link that uses your own domain, say
```
https://pics.example.org/?t=...
```
You don't need to run any servers or manage any services, Ente will still host and serve your album for you, the only thing that changes is that you can serve your links using your personalized domain.
## Availability
The custom domains feature requires the ability to publicly share albums which for abuse prevention reasons can only be done by people with an active Ente subscription.
## Setup
The setup involves two steps:
1. Letting Ente know about the domain you wish to use for serving your public links
2. Updating your DNS settings to point your domain (or subdomain) to **my.ente.io**
For people who are comfortable with changing DNS settings on their domain provider, this entire process is very simple will take a minute. For people who are not comfortable with changing DNS, we will provide a more detailed breakdown below.
Let's dive in.
To make the process concrete, let's assume we're trying to use _pics.example.org_ as our custom domain. Note that there is no restriction to use a subdomain, a top level domain can be used as a custom domain too. That is, either of _example.org_ or _subdomain.example.org_ is fine, Ente will work with both.
### Step 1 - Link your domain
The first step is to let Ente know about the domain or subdomain you wish to use by linking it to your account.
> [!WARNING]
>
> Currently (Sep 2025) the ability to link a custom domain is only present in Ente's web app, [web.ente.io](https://web.ente.io).
Head over to Preferences > Custom domains, in the domain field enter "pics.example.org" (replace with your subdomain) and press "Save". That's it. The linking is done.
### Step 2 - Add DNS entry
The second step is to add a CNAME entry in your DNS provider that forwards requests for pics.example.org (replace with your subdomain) to **my.ente.io**.
Specifically, you need to add a `CNAME record` from the domain (or subdomain) of your choice to `my.ente.io`. You can leave the `TTL` at its default.
| Record Type | Name | Value | TTL |
| ----------- | :------------------------: | -----------: | -------------- |
| CNAME | Your subdomain, e.g `pics` | `my.ente.io` | Auto (default) |
The exact steps for doing this depend on the DNS provider that you're using.
> Your DNS provider usually is the service from which you bought your domain. The domain name seller will provide some sort of an admin panel where you can configure your DNS settings.
As concrete examples, here is how this step would look for Cloudflare:
![Adding a CNAME for custom domain in Cloudflare](cf.png)
Note that orange proxy option is off. And here is how it would look for Namecheap:
![Adding a CNAME for custom domain in Namecheap](nc.png)
> [!NOTE]
>
> The examples are using "pics" as the subdomain, but that's just an example, you can use anything you like (or use "@" if you'd like to use the root domain itself).
The time it takes for DNS records to update is dependent on your DNS provider. Usually the changes should start reflecting within a few minutes, and should almost always reflect within an hour.
Once the DNS changes have been applied, then you can take any public link to your shared albums, replace `albums.ente.io` with your choice (e.g. `pics.example.org`), and the link will still work.
You don't need to do this manually though, the apps will do it for you. More on this in the next section. But first, some troubleshooting tips.
### Troubleshooting
If your domain is not working, go through the following checklist.
- The CNAME should be from your domain to my.ente.io, not the other way around. That is, `pics.example.org => my.ente.io`.
- If you're using Cloudflare DNS, make sure that the "Orange" proxy status toggle is off, and the Proxy status is the "Grey" DNS only.
## Using
Using is trivial. When you go to an album's sharing options and copy the link to it, Ente will automatically copy the link that uses your configured domain.
> [!WARNING]
>
> Currently (Sep 2025) the ability to automatically substitute your custom domain is present in Ente's web and mobile apps, but not in the desktop app (The next desktop version to be released will have that ability too).
## Unsetting
To stop using your custom domain, we need to undo the two steps we did during setup.
1. Unlink your domain in Ente. This can be done just by going to Preferences > Custom Domains, clearing the value in the "Domain" input and pressing "Update".
2. Remove the CNAME record you added during setup in your DNS provider.
## Implementation
Our engineers also wrote [explainer](https://ente.io/blog/custom-domains/) of how this works behind the scenes.

Binary file not shown.

Before

Width:  |  Height:  |  Size: 41 KiB

View File

@@ -6,7 +6,7 @@ description: Removing duplicates photos using Ente Photos
# Deduplicate
Ente performs two different duplicate detections: one during uploads, and one
that can be manually run afterwards to remove duplicates and very similar files across albums.
that can be manually run afterwards to remove duplicates across albums.
## During uploads
@@ -16,7 +16,7 @@ When uploading, Ente will ignore exact duplicate files. This allows you to
resume interrupted uploads, or drag and drop the same folder, or reinstall the
app, and expect Ente to automatically skip duplicates and only add new files.
The duplicate detection works slightly differently on each platform, to cater to
The duplicate detection works slightly different on each platform, to cater to
the platform's nuances.
#### Mobile
@@ -48,7 +48,7 @@ to album", and the actual files are not re-uploaded.
## Manual deduplication
Ente provides a tool for manual de-duplication in _Settings → Backup → Free up space →
Ente also provides a tool for manual de-duplication in _Settings → Backup →
Remove duplicates_. This is useful if you have an existing library with
duplicates across different albums, but wish to keep only one copy.
@@ -57,13 +57,6 @@ single copy, and add symlinks to this copy within all existing albums. So your
existing album structure remains unchanged, while the space consumed by the
duplicate data is freed up.
## Filtering similar images
Ente also provides a tool for manual removal of images that are similar, but not the exact same, using our private ML. This feature can be found in _Settings → Backup → Free up space →
Similar images_. This is useful if you've taken a lot of similar photos, potentiall even in different albums, and want to keep only the best ones.
During this filtering process you can choose which photos to keep and which to delete for each set of similar images. Ente will then automatically add symlinks for the kept photos to any albums that only had the deleted images. This way you can easily prune similar images, without worrying about accidentally removing the best ones from a certain album.
## Adding to Ente album creates symlinks
Note that once a file is in Ente, adding it to another Ente album will create a

View File

@@ -1,6 +1,7 @@
---
title: Family plans
description: Share your Ente Photos plan with your family members with no extra cost
description:
Share your Ente Photos plan with your family members with no extra cost
---
# Family plans

View File

@@ -1,6 +1,7 @@
---
title: Watch folder
description: Automatic syncing of selected folders using the Ente Photos desktop app
description:
Automatic syncing of selected folders using the Ente Photos desktop app
---
# Watch folders

View File

@@ -1,6 +1,7 @@
---
title: Import from local hard disk
description: Migrating to Ente Photos by importing data from your local hard disk
description:
Migrating to Ente Photos by importing data from your local hard disk
---
# Import photos from your local hard disk

View File

@@ -99,17 +99,3 @@ If you do want to run it from the command line, you can do so by passing the
For more details, see this upstream issue on
[electron](https://github.com/electron/electron/issues/17972).
### Application reporting offline despite Internet connectivity
Due to unreliability of usage of `navigator.onLine` in Linux, the app may report that you are offline, even though the internet connection is functional.
You can resolve the issue by adding a dummy network interface using the following command:
```shell
ip link add dummy0 type dummy
ip addr add 10.10.10.1/24 dev dummy0
ip link set dummy0 up
```
Once the interface is up, Ente correctly detects that the system is online.

View File

@@ -1,6 +1,7 @@
---
title: Files not uploading
description: Troubleshooting when files are not uploading from your Ente Photos app
description:
Troubleshooting when files are not uploading from your Ente Photos app
---
# Files not uploading

View File

@@ -8,12 +8,6 @@ description: Guide to configuring Ente CLI for Self Hosted Instance
If you are self-hosting, you can configure Ente CLI to export data & perform
basic administrative actions.
::: tip Installing Ente CLI
For instructions on installing the Ente CLI, see the [README available on Github](https://github.com/ente-io/ente/tree/main/cli/README.md).
:::
## Step 1: Configure endpoint
To do this, first configure the CLI to use your server's endpoint.

View File

@@ -63,15 +63,12 @@ It has no relation to Backblaze, Wasabi or Scaleway.
Each bucket's endpoint, region, key and secret should be configured accordingly
if using an external bucket.
If a bucket has SSL support enabled, set `s3.are_local_buckets` to `false`. Enable path-style URL by setting `s3.use_path_style_urls` to `true`.
Additionally, you can enable SSL and path-style URL for specific buckets, which
provides flexibility for storage. If this is not configured, top level
configuration (`s3.are_local_buckets` and `s3.use_path_style_urls`) is used.
::: note
You can configure this for individual buckets over defining top-level configuration if you are using the latest server image (August 2025)
:::
A sample configuration for `b2-eu-cen` is provided, which can be used for other 2 buckets as well:
A sample configuration for `b2-eu-cen` is provided, which can be used for other
2 buckets as well:
```yaml
b2-eu-cen:

View File

@@ -89,7 +89,7 @@ cast.ente.yourdomain.tld {
Reload Caddy for changes to take effect.
```shell
sudo systemctl reload caddy
sudo systemctl caddy reload
```
## Step 4: Verify the setup

View File

@@ -22,7 +22,8 @@ can achieve this the following steps:
# Change the DB name and DB user name if you use different
# values.
# If using Docker
docker exec -it <postgres-ente-container-name> sh
docker exec -it <postgres-ente-container-name>
psql -U pguser -d ente_db
# Or when using psql directly
@@ -107,11 +108,24 @@ emails having @example.com as suffix.
### Send email with verification code
You can configure SMTP for sending verification code e-mails to users, if you do
not wish to hardcode OTTs and have larger audience.
You can configure SMTP for sending verification code e-mails to users, which is
efficient if you do not know mail addresses of people for who you want to
hardcode OTTs or if you are serving larger audience.
For more information on configuring email, check out the
[email configuration](/self-hosting/installation/config#email) section.
Set the host and port accordingly with your credentials in `museum.yaml`
```yaml
smtp:
host:
port:
# Optional username and password if using local relay server
username:
password:
# Email address used for sending emails (this mail's credentials have to be provided)
email:
# Optional name for sender
sender-name:
```
## Disable registrations

View File

@@ -7,8 +7,8 @@ description: Getting started with self-hosting Ente
If you're looking to spin up Ente on your server, you are in the right place!
Our entire source code,
[including the server](https://ente.io/blog/open-sourcing-our-server/) is open
Our entire source code
([including the server](https://ente.io/blog/open-sourcing-our-server/)) is open
source. This is the same code we use on production.
For a quick preview, make sure your system meets the requirements mentioned
@@ -35,12 +35,9 @@ This creates a directory `my-ente` in the current working directory, prompts to
start the cluster with needed containers after pulling the images required to
run Ente.
::: info
Make sure to modify the default values in `compose.yaml` and `museum.yaml` if
you wish to change endpoints, bucket configuration or server configuration.
:::
::: note Make sure to modify the default values in `compose.yaml` and
`museum.yaml` if you wish to change endpoints, bucket configuration or server
configuration. :::
## Try the web app

View File

@@ -45,25 +45,6 @@ cp example.yaml museum.yaml
Change the values present in `.env` file along with `museum.yaml` file
accordingly.
::: tip
Make sure to enter the correct values for the database and object storage.
You should consider generating values for JWT and encryption keys for emails if
you intend to use for long-term needs.
You can do by running the following command inside `ente/server`, assuming you
cloned the repository to `ente`:
```shell
# Change into the ente/server
cd ente/server
# Generate secrets
go run tools/gen-random-keys/main.go
```
:::
## Step 3: Start the cluster
Start the cluster by running the following command:

View File

@@ -78,9 +78,6 @@ used for Compose and quickstart for ease of use.)
### Database
The `db` section is used for configuring database connectivity. Ensure you
provide correct credentials for proper connectivity within Museum.
| Variable | Description | Default |
| ------------- | -------------------------- | ----------- |
| `db.host` | DB hostname | `localhost` |
@@ -96,14 +93,11 @@ provide correct credentials for proper connectivity within Museum.
The `s3` section within `museum.yaml` is by default configured to use local
MinIO buckets when using `quickstart.sh` or Docker Compose.
If you wish to use an external S3 provider with SSL, you can edit the configuration with
your provider's credentials, and set `s3.are_local_buckets` to `false`. Additionally, you can configure this for specific buckets in the corresponding bucket sections in the Compose file.
If you wish to use an external S3 provider, you can edit the configuration with
your provider's credentials, and set `are_local_buckets` to `false`.
If you are using default MinIO, it is accessible at port `3200`. Web Console can
be accessed by enabling port `3201` in the Compose file.
For more information on object storage configuration, check our
[documentation](/self-hosting/administration/object-storage).
MinIO uses the port `3200` for API Endpoints. Web Console can be accessed at
http://localhost:3201 by enabling port `3201` in the Compose file.
If you face any issues related to uploads then check out
[CORS](/self-hosting/administration/object-storage#cors-cross-origin-resource-sharing)
@@ -111,11 +105,11 @@ and [troubleshooting](/self-hosting/troubleshooting/uploads) sections.
| Variable | Description | Default |
| -------------------------------------- | -------------------------------------------- | ------- |
| `s3.b2-eu-cen` | Primary hot storage bucket configuration | |
| `s3.b2-eu-cen` | Primary hot storage S3 config | |
| `s3.wasabi-eu-central-2-v3.compliance` | Whether to disable compliance lock on delete | `true` |
| `s3.scw-eu-fr-v3` | Cold storage bucket configuration | |
| `s3.wasabi-eu-central-2-v3` | Secondary hot storage configuration | |
| `s3.are_local_buckets` | | `true` |
| `s3.scw-eu-fr-v3` | Optional secondary S3 config | |
| `s3.wasabi-eu-central-2-derived` | Derived data storage | |
| `s3.are_local_buckets` | Use local MinIO-compatible storage | `false` |
| `s3.use_path_style_urls` | Enable path-style URLs for MinIO | `false` |
### Encryption Keys
@@ -152,29 +146,6 @@ go run tools/gen-random-keys/main.go
### Email
You may wish to send emails for verification codes instead of
[hardcoding them](/self-hosting/administration/users#use-hardcoded-otts). In
such cases, you can configure SMTP (or Zoho Transmail, for bulk emails).
Set the host and port accordingly with your credentials in `museum.yaml`
You may skip the username and password if using a local relay server.
```yaml
smtp:
host:
port:
# Optional username and password if using local relay server
username:
password:
# Email address used for sending emails (this mail's credentials have to be provided)
email:
# Optional name for sender
sender-name:
# Optional encryption
encryption:
```
| Variable | Description | Default |
| ------------------ | ---------------------------- | ------- |
| `smtp.host` | SMTP server host | |
@@ -183,7 +154,6 @@ smtp:
| `smtp.password` | SMTP auth password | |
| `smtp.email` | Sender email address | |
| `smtp.sender-name` | Custom name for email sender | |
| `smtp.encryption` | Encryption method (tls, ssl) | |
| `transmail.key` | Zeptomail API key | |
### WebAuthn Passkey Support

View File

@@ -92,9 +92,9 @@ git clone https://github.com/ente-io/ente
2. Build the server. The server binary should be available as `./main` relative
to `server` directory
```shell
go build cmd/museum/main.go
```
``` shell
go build cmd/museum/main.go
```
3. Create `museum.yaml` file inside `server` for configuring the needed
variables. You can copy the templated configuration file for editing with
@@ -104,25 +104,6 @@ git clone https://github.com/ente-io/ente
cp config/example.yaml ./museum.yaml
```
::: tip
Make sure to enter the correct values for the database and object storage.
You should consider generating values for JWT and encryption keys for emails
if you intend to use for long-term needs.
You can do by running the following command inside `ente/server`, assuming
you cloned the repository to `ente`:
```shell
# Change into the ente/server
cd ente/server
# Generate secrets
go run tools/gen-random-keys/main.go
```
:::
4. Run the server
```shell

View File

@@ -46,7 +46,7 @@ If running Museum without Docker, the code should be visible in the terminal
# Change the DB name and DB user name if you use different
# values.
# If using Docker docker exec -it <postgres-ente-container-name> sh
# If using Docker docker exec -it <postgres-ente-container-name>
psql -U pguser -d ente_db
# Or when using psql directly
@@ -159,7 +159,7 @@ apps](web-dev-settings.png){width=400px}
## Step 7: Configure Ente CLI
You can download Ente CLI from
[here](https://github.com/ente-io/ente/releases?q=tag%3Acli).
[here](https://github.com/ente-io/ente/releases?q=tag%3Acli)
Check our [documentation](/self-hosting/administration/cli) on how to use Ente
CLI for managing self-hosted instances.

View File

@@ -1,52 +0,0 @@
---
title: Ente CLI - Self-hosting
description: A quick hotfix for keyring errors while running Ente CLI.
---
# Ente CLI
## Secrets
Ente CLI makes use of your system keyring for storing sensitive information such
as passwords.
There are 2 ways to address keyring-related error:
### Install system keyring
This is the recommended method as it is considerably secure than the latter.
If you are using Linux for accessing Ente CLI with, you can install a system
keyring manager such as `gnome-keyring`, `kwallet`, etc. via your distribution's
package manager.
For Ubuntu/Debian based distributions, you can install `gnome-keyring` via `apt`
```shell
sudo apt install gnome-keyring
```
Now you can use Ente CLI for adding account, which will trigger your system's
keyring.
### Configure secrets path
In case of using Ente CLI on server environment, you may not be able to install
system keyring. In such cases, you can configure Ente CLI to use a text file for
saving the secrets.
Set `ENTE_CLI_SECRETS_PATH` environment variable in your shell's configuration
file (`~/.bashrc`, `~/.zshrc`, or other corresponding file)
```shell
# Replace ./secrets.txt with the path to secrets file
# that you are using for saving.
# IMPORTANT: Make sure it is stored in a secure place.
export ENTE_CLI_SECRETS_PATH=./secrets.txt
```
When you run Ente CLI, and if the file doesn't exist, Ente CLI will create it
and fill it with a random 32 character encryption key.
If you create the file, please fill it with a cryptographically generated 32
byte string.

View File

@@ -17,20 +17,19 @@ description: Fixing Docker-related errors when trying to self-host Ente
## post_start
The Docker compose file used if relying on quickstart script or installation
using Docker Compose uses the "post_start" lifecycle hook to provision the MinIO
instance.
The `server/compose.yaml` Docker compose file uses the "post_start" lifecycle
hook to provision the MinIO instance.
The lifecycle hook **requires Docker Compose version 2.30.0+**, and if you're
using an older version of Docker Compose you will see an error like this:
using an older version of docker compose you will see an error like this:
```
validating compose.yaml: services.minio Additional property post_start is not allowed
```
The easiest way to resolve this is to upgrade your Docker Compose.
The easiest way to resolve this is to upgrade your Docker compose.
If you cannot update your Docker Compose version, then alternatively you can
If you cannot update your Docker compose version, then alternatively you can
perform the same configuration by removing the "post_start" hook, and adding a
new service definition:
@@ -71,11 +70,11 @@ supports the `start_interval` property on the health check.
## Postgres authentication failed
If you are getting Postgres password authentication failures when starting your
If you're getting Postgres password authentication failures when starting your
cluster, then you might be using a stale Docker volume.
If you are getting an error of the following form (pasting a full example for
easier greppability):
In more detail, if you're getting an error of the following form (pasting a full
example for easier greppability):
```
museum-1 | panic: pq: password authentication failed for user "pguser"
@@ -93,13 +92,9 @@ is expecting.
There are 2 possibilities:
1. If you are using Docker Compose for running Ente from source, you might not
have set the same credentials in `.env` and `museum.yaml` inside
`server/config` directory. Edit the values to make sure the correct
credentials are being used.
2. When you have created a cluster in `my-ente` directory on running
`quickstart.sh` and later deleted it, only to create another cluster with
same `my-ente` directory.
1. When you have created a cluster in `my-ente` directory on running
`quickstart.sh` and later deleted it, only to create another cluster with
same `my-ente` directory.
However, by deleting the directory, the Docker volumes are not deleted.
@@ -134,7 +129,12 @@ There are 2 possibilities:
## MinIO provisioning error
If you encounter similar logs while starting your Docker Compose cluster
MinIO has deprecated the `mc config` command in favor of `mc alias set`
resulting in failure in execution of the command for creating bucket using
`post_start` hook.
You may encounter similar logs while trying to start the cluster if you are
using the older command (provided by default in `quickstart.sh`):
```
my-ente-minio-1 -> | Waiting for minio...
@@ -142,8 +142,9 @@ my-ente-minio-1 -> | Waiting for minio...
my-ente-minio-1 -> | Waiting for minio...
```
This could be due to usage of deprecated MinIO `mc config` command. Changing
`mc config host h0 add` to `mc alias set h0` resolves this.
This can be resolved by changing
`mc config host h0 add http://minio:3200 $minio_user $minio_pass` to
`mc alias set h0 http://minio:3200 $minio_user $minio_pass`
Thus the updated `post_start` will look as follows for `minio` service:
@@ -155,6 +156,13 @@ Thus the updated `post_start` will look as follows for `minio` service:
sh -c '
#!/bin/sh
while ! mc alias set h0 http://minio:3200 your_minio_user your_minio_pass 2>/dev/null
...
do
echo "Waiting for minio..."
sleep 0.5
done
cd /data
mc mb -p b2-eu-cen
mc mb -p wasabi-eu-central-2-v3
mc mb -p scw-eu-fr-v3
'
```

View File

@@ -0,0 +1,38 @@
---
title: Ente CLI Secrets - Self-hosting
description: A quick hotfix for keyring errors while running Ente CLI.
---
# Ente CLI Secrets
Ente CLI makes use of system keyring for storing sensitive information like your
passwords. And running the CLI straight out of the box might give you some
errors related to keyrings in some case.
Follow the below steps to run Ente CLI and also avoid keyrings errors.
Run:
```shell
# export the secrets path
export ENTE_CLI_SECRETS_PATH=./<path-to-secrets.txt>
./ente-cli
```
You can also add the above line to your shell's rc file, to prevent the need to
export manually every time.
Then one of the following:
1. If the file doesn't exist, Ente CLI will create it and fill it with a random
32 character encryption key.
2. If you do create the file, please fill it with a cryptographically generated
32 byte string.
And you are good to go.
## References
- [Ente CLI Secrets Path](https://www.reddit.com/r/selfhosted/comments/1gc09il/comment/lu2hox2/?utm_source=share&utm_medium=web3x&utm_name=web3xcss&utm_term=1&utm_content=share_button)
- [Keyrings](https://man7.org/linux/man-pages/man7/keyrings.7.html)

View File

@@ -1,167 +0,0 @@
# Ente Log Viewer
A web-based log viewer for analyzing Ente application logs. This tool provides similar functionality to the mobile log viewer, allowing you to upload, filter, and analyze log files from customer support requests.
## Features
### 📁 File Upload
- Drag and drop ZIP files containing log files
- Automatic extraction and parsing of log files
- Support for daily log files format (YYYY-M-D.log)
### 🔍 Search and Filtering
- **Text Search**: Search through log messages, logger names, and error content
- **Logger Filtering**: Use `logger:ServiceName` syntax to filter by specific loggers
- **Wildcard Support**: Use `logger:Auth*` to match all loggers starting with "Auth"
- **Level Filtering**: Filter by log levels (SEVERE, WARNING, INFO, etc.)
- **Process Filtering**: Filter by foreground/background processes
- **Timeline Filtering**: Filter by date/time ranges
### 📊 Analytics
- Logger statistics showing most active components
- Log level distribution charts
- Click-to-filter from analytics charts
### 🎨 UI Features
- **Color-coded log levels**: Red for SEVERE, orange for WARNING, etc.
- **Process indicators**: Visual distinction between foreground and background processes
- **Active filter chips**: Visual indication of applied filters with easy removal
- **Log detail view**: Click any log entry for detailed information
- **Sort options**: Sort by newest first or oldest first
- **Responsive design**: Works on desktop and mobile devices
### 📤 Export
- Export filtered logs as text files
- Copy individual log entries to clipboard
- Maintain original formatting and error details
## Usage
### Starting the Application
1. **Local Development**:
```bash
cd infra/experiments/logs-viewer
python3 -m http.server 8080
```
Open http://localhost:8080 in your browser
2. **Upload Log Files**:
- Drag and drop a ZIP file containing `.log` files
- Or click "Choose ZIP File" to browse for files
### Log Format Support
The viewer understands the Ente log format as generated by `super_logging.dart`:
```
[process] [loggerName] [LEVEL] [timestamp] message
```
**Examples**:
- `[bg] [SyncService] [INFO] [2025-08-24 01:36:03.677678] Syncing started`
- `[CollectionsService] [WARNING] [2025-08-24 01:36:04.123456] Connection failed`
**Multi-line Error Support**:
- Automatically parses `` error detail lines
- Extracts stack traces and error IDs
- Handles inline error messages and exceptions
### Filtering Examples
- **Search by text**: `connection failed`
- **Filter by logger**: `logger:SyncService`
- **Multiple loggers**: `logger:Sync* logger:Collection*`
- **Combined search**: `logger:Auth* login failed`
### Keyboard Shortcuts
- **Search**: Click search bar or start typing
- **Clear search**: Click X button or clear the input
- **Sort toggle**: Click sort arrow button
- **Filter dialog**: Click filter button
## Technical Details
### Supported Log Levels
- **SHOUT**: Purple - Highest priority
- **SEVERE**: Red - Errors and exceptions
- **WARNING**: Orange - Warning conditions
- **INFO**: Blue - Informational messages
- **CONFIG**: Green - Configuration messages
- **FINE/FINER/FINEST**: Gray - Debug messages
### Process Types
- **Foreground**: Main app processes
- **Background (bg)**: Background tasks
- **Firebase Background (fbg)**: Firebase-related background processes
### Performance
- Lazy loading: Only renders visible log entries
- Efficient filtering: Client-side filtering with optimized algorithms
- Memory management: Handles large log files (tested with 100k+ entries)
## Sample Log Files
For testing, you can use any ZIP file containing `.log` files from Ente mobile app logs.
## Development
### File Structure
```
logs-viewer/
├── index.html # Main HTML structure
├── styles.css # CSS styling
├── script.js # JavaScript logic
├── README.md # This documentation
└── references/ # UI reference screenshots
```
### Key JavaScript Classes
- `LogViewer`: Main application class
- Log parsing logic in `parseLogFile()` and `parseLogLine()`
- Filter management in `applyCurrentFilter()`
- UI rendering in `renderLogs()` and `createLogEntryHTML()`
### Adding Features
1. **New Filter Types**: Extend `currentFilter` object and `matchesFilter()` method
2. **New Log Formats**: Update parsing patterns in `parseLogLine()`
3. **UI Components**: Add HTML elements and CSS classes, wire up in `initializeEventListeners()`
## Troubleshooting
### Common Issues
1. **ZIP file not loading**:
- Ensure ZIP contains `.log` files
- Check browser console for errors
- Try a smaller file first
2. **Logs not parsing correctly**:
- Check log format matches expected pattern
- Look for console warnings about parsing failures
- Verify timestamp format is correct
3. **Performance issues with large files**:
- The viewer handles pagination (100 logs at a time)
- Use filters to reduce the dataset
- Close other browser tabs to free memory
4. **Search not working**:
- Check for typos in logger names
- Use wildcard syntax: `logger:Service*`
- Search is case-insensitive for message content
### Browser Compatibility
- **Recommended**: Chrome 80+, Firefox 75+, Safari 13+
- **Required**: ES6 support, Fetch API, File API
- **Dependencies**: JSZip library for ZIP file handling
## Future Enhancements
- Real-time log streaming
- Advanced regex search
- Log correlation and grouping
- Performance metrics dashboard
- Dark theme support
- Export to JSON/CSV formats

View File

@@ -1,110 +0,0 @@
/* Ente Theme Variables based on web/packages/base/components/utils/theme.ts */
:root {
/* Light theme colors */
--ente-color-accent-photos: #1db954;
--ente-color-accent-auth: #9610d6;
--ente-color-accent-locker: #5ba8ff;
/* Background colors */
--ente-background-default: #fff;
--ente-background-paper: #fff;
--ente-background-paper2: #fbfbfb;
--ente-background-search: #f3f3f3;
/* Text colors */
--ente-text-base: #000;
--ente-text-muted: rgba(0, 0, 0, 0.60);
--ente-text-faint: rgba(0, 0, 0, 0.50);
/* Fill colors */
--ente-fill-base: #000;
--ente-fill-muted: rgba(0, 0, 0, 0.12);
--ente-fill-faint: rgba(0, 0, 0, 0.04);
--ente-fill-faint-hover: rgba(0, 0, 0, 0.08);
--ente-fill-fainter: rgba(0, 0, 0, 0.02);
/* Stroke colors */
--ente-stroke-base: #000;
--ente-stroke-muted: rgba(0, 0, 0, 0.24);
--ente-stroke-faint: rgba(0, 0, 0, 0.12);
--ente-stroke-fainter: rgba(0, 0, 0, 0.06);
/* Shadow */
--ente-shadow-paper: 0px 0px 10px rgba(0, 0, 0, 0.25);
--ente-shadow-menu: 0px 0px 6px rgba(0, 0, 0, 0.16), 0px 3px 6px rgba(0, 0, 0, 0.12);
--ente-shadow-button: 0px 4px 4px rgba(0, 0, 0, 0.25);
/* Fixed colors */
--ente-success: #1db954;
--ente-warning: #ffc107;
--ente-danger: #ea3f3f;
--ente-danger-dark: #f53434;
--ente-danger-light: #ff6565;
/* Secondary colors */
--ente-secondary-main: #f5f5f5;
--ente-secondary-hover: #e9e9e9;
/* Action colors */
--ente-action-hover: rgba(0, 0, 0, 0.08);
--ente-action-disabled: rgba(0, 0, 0, 0.50);
/* Typography */
--ente-font-family: "Inter Variable", sans-serif;
--ente-font-weight-regular: 500;
--ente-font-weight-medium: 600;
--ente-font-weight-bold: 700;
/* Border radius */
--ente-border-radius: 8px;
--ente-border-radius-small: 4px;
/* Spacing */
--ente-spacing-xs: 4px;
--ente-spacing-sm: 8px;
--ente-spacing-md: 12px;
--ente-spacing-lg: 16px;
--ente-spacing-xl: 24px;
}
/* Dark theme */
@media (prefers-color-scheme: dark) {
:root {
/* Background colors */
--ente-background-default: #000;
--ente-background-paper: #1b1b1b;
--ente-background-paper2: #252525;
--ente-background-search: #1b1b1b;
/* Text colors */
--ente-text-base: #fff;
--ente-text-muted: rgba(255, 255, 255, 0.70);
--ente-text-faint: rgba(255, 255, 255, 0.50);
/* Fill colors */
--ente-fill-base: #fff;
--ente-fill-muted: rgba(255, 255, 255, 0.16);
--ente-fill-faint: rgba(255, 255, 255, 0.12);
--ente-fill-faint-hover: rgba(255, 255, 255, 0.16);
--ente-fill-fainter: rgba(255, 255, 255, 0.05);
/* Stroke colors */
--ente-stroke-base: #fff;
--ente-stroke-muted: rgba(255, 255, 255, 0.24);
--ente-stroke-faint: rgba(255, 255, 255, 0.16);
--ente-stroke-fainter: rgba(255, 255, 255, 0.12);
/* Shadow */
--ente-shadow-paper: 0px 2px 12px rgba(0, 0, 0, 0.75);
--ente-shadow-menu: 0px 0px 6px rgba(0, 0, 0, 0.50), 0px 3px 6px rgba(0, 0, 0, 0.25);
--ente-shadow-button: 0px 4px 4px rgba(0, 0, 0, 0.75);
/* Secondary colors */
--ente-secondary-main: #2b2b2b;
--ente-secondary-hover: #373737;
/* Action colors */
--ente-action-hover: rgba(255, 255, 255, 0.16);
--ente-action-disabled: rgba(255, 255, 255, 0.50);
}
}

View File

@@ -1,218 +0,0 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Ente Log Viewer</title>
<!-- Material-UI CSS -->
<link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700&display=swap" />
<link rel="stylesheet" href="https://fonts.googleapis.com/icon?family=Material+Icons" />
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/@mui/material@latest/dist/index.css" />
<!-- Ente theme -->
<link rel="stylesheet" href="ente-theme.css">
<!-- Custom styles -->
<link rel="stylesheet" href="styles.css">
</head>
<body>
<div class="app">
<!-- Header -->
<header class="header">
<div class="header-content">
<h1>📋 Ente Log Viewer</h1>
<div class="header-actions">
<button id="filter-btn" class="mui-icon-btn" title="Filter logs">
<span class="material-icons">filter_list</span>
<span class="filter-count" id="filter-count" style="display: none;"></span>
</button>
<button id="sort-btn" class="mui-icon-btn" title="Sort order">
<span class="material-icons">arrow_downward</span>
</button>
<div class="dropdown">
<button class="mui-icon-btn dropdown-toggle" title="More actions">
<span class="material-icons">more_vert</span>
</button>
<div class="dropdown-menu mui-menu">
<button id="analytics-btn" class="dropdown-item mui-menu-item">
<span class="material-icons">analytics</span>
<span>Analytics</span>
</button>
<button id="export-btn" class="dropdown-item mui-menu-item">
<span class="material-icons">download</span>
<span>Export Logs</span>
</button>
<button id="clear-btn" class="dropdown-item mui-menu-item danger">
<span class="material-icons">delete</span>
<span>Clear Logs</span>
</button>
</div>
</div>
</div>
</div>
</header>
<!-- Upload Section -->
<div class="upload-section" id="upload-section">
<div class="upload-area" id="upload-area">
<div class="upload-content">
<div class="upload-icon">📁</div>
<h2>Upload Log Files</h2>
<p>Drag and drop a zip file containing log files, or click to browse</p>
<input type="file" id="file-input" accept=".zip" hidden>
<button id="browse-btn" class="primary-btn">Choose ZIP File</button>
</div>
</div>
</div>
<!-- Main Content -->
<div class="main-content" id="main-content" style="display: none;">
<!-- Search Bar -->
<div class="search-section">
<div class="search-bar mui-search-container">
<div class="mui-textfield">
<input type="text" id="search-input" placeholder="Search logs... (try 'logger:SyncService' or text search)" class="mui-input" />
<span class="mui-search-icon material-icons">search</span>
<button id="clear-search" class="mui-clear-btn" style="display: none;">
<span class="material-icons">clear</span>
</button>
</div>
</div>
</div>
<!-- Timeline Filter -->
<div class="timeline-section" id="timeline-section" style="display: none;">
<div class="timeline-header">
<span class="material-icons">timeline</span>
<span>Timeline Filter</span>
<button id="timeline-toggle" class="mui-icon-btn timeline-btn">
<span class="material-icons">timeline</span>
</button>
</div>
<div class="timeline-controls" id="timeline-controls" style="display: none;">
<div class="timeline-range">
<div class="mui-textfield">
<input type="datetime-local" id="start-time" class="mui-input" />
</div>
<span class="range-separator">to</span>
<div class="mui-textfield">
<input type="datetime-local" id="end-time" class="mui-input" />
</div>
<button id="reset-timeline" class="mui-button secondary">
<span class="material-icons">refresh</span>
<span>Reset</span>
</button>
</div>
</div>
</div>
<!-- Active Filters -->
<div class="active-filters" id="active-filters" style="display: none;">
<div class="filter-chips" id="filter-chips"></div>
</div>
<!-- Log Stats -->
<div class="log-stats" id="log-stats">
<span id="log-count">0 logs loaded</span>
<span id="filtered-count"></span>
</div>
<!-- Log List -->
<div class="log-list-container">
<div class="log-list" id="log-list">
<!-- Log entries will be populated here -->
</div>
<div class="loading" id="loading" style="display: none;">Loading...</div>
<div class="load-more" id="load-more" style="display: none;">
<button class="secondary-btn">Load More</button>
</div>
</div>
</div>
</div>
<!-- Filter Dialog -->
<div class="dialog-overlay" id="filter-dialog" style="display: none;">
<div class="dialog">
<div class="dialog-header">
<h2>Filter Logs</h2>
<button class="close-btn" id="close-filter"></button>
</div>
<div class="dialog-content">
<!-- Log Levels -->
<div class="filter-section">
<h3>Log Levels</h3>
<div class="level-chips" id="level-chips">
<!-- Level chips will be populated here -->
</div>
</div>
<!-- Process -->
<div class="filter-section">
<h3>Process</h3>
<div class="process-list" id="process-list">
<!-- Process checkboxes will be populated here -->
</div>
</div>
<!-- Loggers -->
<div class="filter-section">
<h3>Loggers</h3>
<div class="logger-list" id="logger-list">
<!-- Logger checkboxes will be populated here -->
</div>
</div>
</div>
<div class="dialog-actions">
<button id="clear-filters" class="secondary-btn">Clear All</button>
<button id="cancel-filter" class="secondary-btn">Cancel</button>
<button id="apply-filters" class="primary-btn">Apply</button>
</div>
</div>
</div>
<!-- Analytics Dialog -->
<div class="dialog-overlay" id="analytics-dialog" style="display: none;">
<div class="dialog">
<div class="dialog-header">
<h2>Logger Analytics</h2>
<button class="close-btn" id="close-analytics"></button>
</div>
<div class="dialog-content">
<div id="analytics-content">
<!-- Analytics charts will be populated here -->
</div>
</div>
<div class="dialog-actions">
<button id="close-analytics-btn" class="secondary-btn">Close</button>
</div>
</div>
</div>
<!-- Log Detail Dialog -->
<div class="dialog-overlay" id="detail-dialog" style="display: none;">
<div class="dialog large">
<div class="dialog-header">
<h2>Log Details</h2>
<button class="close-btn" id="close-detail"></button>
</div>
<div class="dialog-content">
<div id="detail-content">
<!-- Log details will be populated here -->
</div>
</div>
<div class="dialog-actions">
<button id="copy-log" class="secondary-btn">Copy</button>
<button id="close-detail-btn" class="secondary-btn">Close</button>
</div>
</div>
</div>
<!-- Material-UI JavaScript -->
<script src="https://unpkg.com/react@18/umd/react.production.min.js"></script>
<script src="https://unpkg.com/react-dom@18/umd/react-dom.production.min.js"></script>
<script src="https://unpkg.com/@mui/material@latest/umd/material-ui.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.10.1/jszip.min.js"></script>
<script src="script.js"></script>
</body>
</html>

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -1,15 +0,0 @@
{
email custom-domains@ente.io
on_demand_tls {
ask https://api.ente.io/custom-domain
}
}
https:// {
tls {
on_demand
}
reverse_proxy https://custom-albums.ente.io {
header_up Host {upstream_hostport}
}
}

View File

@@ -1,19 +0,0 @@
# Caddy
Caddy is used to terminate TLS and manage certificates for custom domains.
## Installation
```sh
sudo mkdir -p /root/caddy/conf
sudo mv Caddyfile /root/caddy/conf
sudo chown root:root /root/caddy/conf/Caddyfile
```
Rest of it works like our other systemd services.
If the Caddyfile changes, the running instance can be updated without restarts by using `sudo systemctl reload caddy`.
## Backups
The entire `/root/caddy` directory can be backed up and contains the everything needed to resurrect the same setup.

View File

@@ -1,17 +0,0 @@
[Unit]
Documentation=https://caddyserver.com/docs/running
Requires=docker.service
After=docker.service
[Service]
ExecStartPre=docker pull caddy
ExecStartPre=-docker stop caddy
ExecStartPre=-docker rm caddy
ExecStart=docker run --name caddy \
--cap-add NET_ADMIN \
-p 80:80 -p 443:443 -p 443:443/udp \
-v /root/caddy/conf:/etc/caddy \
-v /root/caddy/data:/data \
-v /root/caddy/config:/config \
caddy
ExecReload=docker exec -w /etc/caddy caddy caddy reload

View File

@@ -1,5 +1,6 @@
{
"tabWidth": 4,
"proseWrap": "always",
"plugins": [
"prettier-plugin-organize-imports",
"prettier-plugin-packagejson"

View File

@@ -1,3 +1,4 @@
{
"tabWidth": 4
"tabWidth": 4,
"proseWrap": "always"
}

45
mobile/.gitignore vendored
View File

@@ -1,45 +0,0 @@
# Miscellaneous
*.class
*.log
*.pyc
*.swp
.DS_Store
.atom/
.buildlog/
.history
.svn/
migrate_working_dir/
# IntelliJ related
*.iml
*.ipr
*.iws
.idea/
melos_*.iml
# The .vscode folder contains launch configuration and tasks you configure in
# VS Code which you may wish to be included in version control, so this line
# is commented out by default.
#.vscode/
# Flutter/Dart/Pub related
**/doc/api/
**/ios/Flutter/.last_build_id
.dart_tool/
.flutter-plugins
.flutter-plugins-dependencies
.packages
.pub-cache/
.pub/
/build/
# Symbolication related
app.*.symbols
# Obfuscation related
app.*.map.json
# Android Studio will place build artifacts here
/android/app/debug
/android/app/profile
/android/app/release

View File

@@ -1,72 +0,0 @@
# For more linters, we can check https://dart-lang.github.io/linter/lints/index.html
# or https://pub.dev/packages/lint (Effective dart)
# use "flutter analyze ." or "dart analyze ." for running lint checks
include: package:flutter_lints/flutter.yaml
linter:
rules:
# Ref https://github.com/flutter/packages/blob/master/packages/flutter_lints/lib/flutter.yaml
# Ref https://dart-lang.github.io/linter/lints/
- avoid_print
- avoid_unnecessary_containers
- avoid_web_libraries_in_flutter
- no_logic_in_create_state
- prefer_const_constructors
- prefer_const_constructors_in_immutables
- prefer_const_declarations
- prefer_const_literals_to_create_immutables
- prefer_final_locals
- require_trailing_commas
- sized_box_for_whitespace
- use_full_hex_values_for_flutter_colors
- use_key_in_widget_constructors
- cancel_subscriptions
- avoid_empty_else
- exhaustive_cases
# just style suggestions
- sort_pub_dependencies
- use_rethrow_when_possible
- prefer_double_quotes
- directives_ordering
- always_use_package_imports
- sort_child_properties_last
- unawaited_futures
analyzer:
errors:
avoid_empty_else: error
exhaustive_cases: error
curly_braces_in_flow_control_structures: error
directives_ordering: error
require_trailing_commas: error
always_use_package_imports: warning
prefer_final_fields: error
unused_import: error
camel_case_types: error
prefer_is_empty: warning
use_rethrow_when_possible: info
unused_field: warning
use_key_in_widget_constructors: warning
sort_child_properties_last: warning
sort_pub_dependencies: warning
library_private_types_in_public_api: warning
constant_identifier_names: ignore
prefer_const_constructors: warning
prefer_const_declarations: warning
prefer_const_constructors_in_immutables: warning
prefer_final_locals: warning
unnecessary_const: error
cancel_subscriptions: error
unrelated_type_equality_checks: error
unnecessary_cast: info
unawaited_futures: warning # convert to warning after fixing existing issues
invalid_dependency: info
use_build_context_synchronously: ignore # experimental lint, requires many changes
prefer_interpolation_to_compose_strings: ignore # later too many warnings
prefer_double_quotes: ignore # too many warnings
avoid_renaming_method_parameters: ignore # incorrect warnings for `equals` overrides

View File

@@ -1,3 +1,3 @@
{
"flutter": "3.32.8"
"flutter": "3.24.3"
}

View File

@@ -44,5 +44,4 @@ android/key.properties
dist/
# FVM Version Cache
.fvm/
lib/l10n/arb/*.dart
.fvm/

View File

@@ -19,16 +19,16 @@ without relying on third party stores.
You can alternatively install the build from PlayStore or F-Droid.
<a href="https://play.google.com/store/apps/details?id=io.ente.auth">
<img height="59" src="../../../.github/assets/play-store-badge.png">
<img height="59" src="../.github/assets/play-store-badge.png">
</a>
<a href="https://f-droid.org/packages/io.ente.auth/">
<img height="59" src="../../../.github/assets/f-droid-badge.png">
<img height="59" src="../.github/assets/f-droid-badge.png">
</a>
### iOS / Apple Silicon macOS
<a href="https://apps.apple.com/us/app/ente-authenticator/id6444121398">
<img height="59" src="../../../.github/assets/app-store-badge.svg">
<img height="59" src="../.github/assets/app-store-badge.svg">
</a>
### Desktop
@@ -44,7 +44,7 @@ or managing your secrets, please use our mobile or desktop app.
## 🧑‍💻 Build from source
1. [Install Flutter v3.32.8](https://flutter.dev/docs/get-started/install).
1. [Install Flutter](https://flutter.dev/docs/get-started/install)
2. Pull in all submodules with `git submodule update --init --recursive`
@@ -98,7 +98,7 @@ more, see [docs/adding-icons](docs/adding-icons.md).
The best way to support this project is by checking out [Ente
Photos](../mobile/README.md) or spreading the word.
For more ways to contribute, see [../../../CONTRIBUTING.md](../../../CONTRIBUTING.md).
For more ways to contribute, see [../CONTRIBUTING.md](../CONTRIBUTING.md).
## Certificate Fingerprints
@@ -113,4 +113,4 @@ apksigner verify --print-certs <path_to_apk>
## ⭐️ About
To know more about Ente and the ways to get in touch or seek help, see [our main
README](../../../README.md) or visit [ente.io](https://ente.io).
README](../README.md) or visit [ente.io](https://ente.io).

View File

@@ -30,13 +30,10 @@ if (keystorePropertiesFile.exists()) {
android {
namespace "io.ente.auth"
compileSdk 36
compileSdk 34
ndkVersion flutter.ndkVersion
compileOptions {
// Flag to enable support for the new language APIs
coreLibraryDesugaringEnabled true
// Sets Java compatibility to Java 8
sourceCompatibility JavaVersion.VERSION_1_8
targetCompatibility JavaVersion.VERSION_1_8
}
@@ -59,8 +56,8 @@ android {
applicationId "io.ente.auth"
// You can update the following values to match your application needs.
// For more information, see: https://docs.flutter.dev/deployment/android#reviewing-the-gradle-build-configuration.
minSdkVersion 22
targetSdkVersion 35
minSdkVersion 21
targetSdkVersion 34
versionCode flutterVersionCode.toInteger()
versionName flutterVersionName
testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner"
@@ -118,7 +115,4 @@ flutter {
source '../..'
}
dependencies {
// For AGP 7.4+
coreLibraryDesugaring("com.android.tools:desugar_jdk_libs:2.1.4")
}
dependencies {}

View File

@@ -1,6 +0,0 @@
# Please add these rules to your existing keep rules in order to suppress warnings.
# This is generated automatically by the Android Gradle plugin.
-dontwarn com.google.errorprone.annotations.CanIgnoreReturnValue
-dontwarn com.google.errorprone.annotations.CheckReturnValue
-dontwarn com.google.errorprone.annotations.Immutable
-dontwarn com.google.errorprone.annotations.RestrictedApi

View File

@@ -6,19 +6,6 @@ allprojects {
}
rootProject.buildDir = '../build'
subprojects {
afterEvaluate { project ->
if (project.hasProperty('android')) {
project.android {
if (namespace == null) {
namespace project.group
}
}
}
}
}
subprojects {
project.buildDir = "${rootProject.buildDir}/${project.name}"
}

View File

@@ -2,4 +2,4 @@ distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-8.7-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.3-all.zip

View File

@@ -19,8 +19,8 @@ pluginManagement {
plugins {
id "dev.flutter.flutter-plugin-loader" version "1.0.0"
id "com.android.application" version "8.6.0" apply false
id "org.jetbrains.kotlin.android" version "2.1.10" apply false
id "com.android.application" version "7.3.0" apply false
id "org.jetbrains.kotlin.android" version "1.8.22" apply false
}
include ":app"

View File

@@ -10,15 +10,6 @@
{
"title": "3Commas"
},
{
"title": "Aadhaar",
"slug": "aadhaar",
"altNames": [
"uidai",
"UIDAI",
"Unique Identification Authority of India"
]
},
{
"title": "Accredible",
"slug": "accredible",
@@ -54,19 +45,6 @@
{
"title": "Amazon"
},
{
"title": "Amtrak",
"slug": "amtrak"
},
{
"title": "Animal Crossing",
"slug:": "animal_crossing",
"altNames": [
"AnimalCrossing",
"Bell Tree Forums",
"BellTree Forums"
]
},
{
"title": "Ankama",
"slug": "ankama"
@@ -113,10 +91,6 @@
{
"title": "availity"
},
{
"title": "AvistaZ.to",
"slug": "avistaz"
},
{
"title": "AzurHosts",
"slug": "azurhosts",
@@ -156,6 +130,14 @@
"Blizzard"
]
},
{
"title": "BBS.NGA",
"slug": "bbs_nga",
"altNames": [
"NGA玩家社区",
"NGA社区"
]
},
{
"title": "Belo"
},
@@ -298,24 +280,12 @@
{
"title": "Caixa"
},
{
"title": "Caltrain",
"slug": "caltrain"
},
{
"title": "Canva"
},
{
"title": "Capacities"
},
{
"title": "Capcom",
"slug": "capcom",
"hex": "0D4DA2",
"altNames": [
"Capcom Co., Ltd."
]
},
{
"title": "Carta",
"altNames": [
@@ -336,37 +306,11 @@
{
"title": "ChangeNOW"
},
{
"title": "Charles Schwab",
"slug": "charles_schwab",
"altNames": [
"schwab",
"charles-schwab",
"charles schwab"
],
"hex": "01A0E0"
},
{
"title": "Channel Island Hosting",
"slug": "cih",
"hex": "D14633"
},
{
"title": "Chucklefish"
},
{
"title": "CinemaZ.to",
"slug": "cinemaz"
},
{
"title": "Clipper",
"slug": "clippercard",
"altNames": [
"ClipperCard",
"clipper-card",
"Clipper Card"
]
},
{
"title": "CloudAMQP"
},
@@ -382,11 +326,6 @@
{
"title": "CoinDCX"
},
{
"title": "CoinTracking",
"slug": "cointracking",
"altNames": ["cointracking.info", "Coin Tracking"]
},
{
"title": "colorado",
"altNames": [
@@ -413,10 +352,6 @@
"title": "Control D",
"slug": "controld"
},
{
"title": "Coolify",
"slug": "coolify"
},
{
"title": "Crowdpear"
},
@@ -447,10 +382,6 @@
"title": "CSGORoll",
"slug": "csgoroll"
},
{
"title": "CrowdSec",
"slug": "crowdsec"
},
{
"title": "Cryptee",
"slug": "cryptee"
@@ -470,11 +401,6 @@
"Digital Combat Simulator"
]
},
{
"title": "DeepSeek",
"slug": "deepseek",
"hex": "4D6BFE"
},
{
"title": "DEGIRO"
},
@@ -503,14 +429,6 @@
{
"title": "DocuSeal"
},
{
"title": "Dominos",
"slug": "dominos",
"altNames": [
"Domino's",
"Domino's Pizza"
]
},
{
"title": "Doppler"
},
@@ -525,15 +443,6 @@
"title": "dus.net",
"slug": "dusnet"
},
{
"title": "Dunkin' Donuts",
"slug": "dunkindonuts",
"altNames": [
"Dunkin'",
"Dunkin",
"Dunkin Donuts"
]
},
{
"title": "eBay"
},
@@ -584,22 +493,6 @@
],
"hex": "858585"
},
{
"title": "exaroton",
"slug": "exaroton",
"altNames": [
"Exaroton"
],
"hex": "17AB17"
},
{
"title": "ExoticaZ.to",
"slug": "exoticaz"
},
{
"title": "Experian",
"slug": "experian"
},
{
"title": "Fanatical",
"slug": "fanatical",
@@ -625,10 +518,6 @@
"Fidelity Investments"
]
},
{
"title": "FileCloud",
"slug": "filecloud"
},
{
"title": "Filen"
},
@@ -716,14 +605,6 @@
"Canada Revenue Agency"
]
},
{
"title": "Green Man Gaming",
"slug": "greenmangaming",
"altNames": [
"green man gaming",
"gmg"
]
},
{
"title": "Guideline"
},
@@ -740,20 +621,6 @@
{
"title": "Hivelocity"
},
{
"title": "HRDocumentBox",
"slug": "hrdocumentbox",
"altNames": ["HRDocumentBox", "HR Document Box"]
},
{
"title": "HSA Bank",
"slug": "hsa_bank",
"altNames": [
"hsa bank",
"hsabank"
],
"hex": "00FF85"
},
{
"title": "HTX"
},
@@ -763,11 +630,6 @@
"Hugging Face"
]
},
{
"title": "Hulu",
"slug": "hulu",
"hex": "1CE783"
},
{
"title": "IBKR",
"slug": "ibkr",
@@ -814,15 +676,6 @@
{
"title": "INWX"
},
{
"title": "IRCTC",
"slug": "irctc",
"altNames": [
"Indian Railway Catering and Tourism Corporation",
"Indian Railways"
],
"hex": "000075"
},
{
"title": "Itch",
"slug": "itch_io",
@@ -836,13 +689,6 @@
"title": "Jagex",
"hex": "D3D800"
},
{
"title": "JetBrains YouTrack",
"slug": "jetbrains-youtrack",
"altNames": [
"YouTrack"
]
},
{
"title": "jianguoyun",
"altNames": [
@@ -852,10 +698,6 @@
{
"title": "Kagi"
},
{
"title": "Kayak",
"slug": "kayak"
},
{
"title": "Keygen",
"altNames": [
@@ -974,14 +816,6 @@
"lu.ma"
]
},
{
"title": "MailCow",
"slug": "mailcow",
"altNames": [
"mailcow",
"mailcow UI"
]
},
{
"title": "MangaDex",
"slug": "mangadex"
@@ -1050,13 +884,6 @@
"MistralAI"
]
},
{
"title": "Mobile01",
"slug": "mobile01",
"altNames": [
"M01"
]
},
{
"title": "Mozilla"
},
@@ -1143,10 +970,6 @@
{
"title": "Nelnet"
},
{
"title": "NetBird",
"slug": "netbird"
},
{
"title": "nintendo",
"altNames": [
@@ -1157,13 +980,6 @@
{
"title": "Njalla"
},
{
"title": "NJTransit",
"slug": "njtransit",
"altNames": [
"NJ Transit"
]
},
{
"title": "nordvpn",
"slug": "nordaccount",
@@ -1187,11 +1003,6 @@
{
"title": "Notion"
},
{
"title": "NumberBarn",
"slug": "numberbarn",
"hex": "1c5787"
},
{
"title": "NuCommunity"
},
@@ -1236,12 +1047,6 @@
"title": "Parqet",
"slug": "parqet"
},
{
"title": "Parallels",
"slug": "parallels",
"hex": "#E61E25",
"altNames": ["Parallels Desktop", "Parallels VM"]
},
{
"title": "Parsec"
},
@@ -1268,13 +1073,6 @@
"Pebble Host"
]
},
{
"title": "PCPartPicker",
"slug": "pcpartpicker",
"altNames": [
"PC Part Picker"
]
},
{
"title": "Peerberry"
},
@@ -1328,10 +1126,6 @@
"title": "Privacy.com",
"slug": "privacy"
},
{
"title": "PrivateHD.to",
"slug": "privatehd"
},
{
"title": "Proton"
},
@@ -1381,13 +1175,6 @@
"r10.net"
]
},
{
"title": "RaiderIO",
"slug": "raider_io",
"altNames": [
"raider.io"
]
},
{
"title": "Raindrop.io",
"slug": "raindrop_io",
@@ -1453,18 +1240,6 @@
"title": "Rockstar Games",
"slug": "rockstar_games"
},
{
"title": "Rose-Hulman Institute of Technology",
"slug": "rose_hulman",
"altNames": [
"rose-hulman",
"Rose-Hulman",
"Rose Hulman",
"Rose Hulman Institute of Technology",
"RHIT"
],
"hex": "800000"
},
{
"title": "RuneMate"
},
@@ -1484,14 +1259,6 @@
"title": "Seafile",
"slug": "seafile"
},
{
"title": "SBI",
"slug": "sbi",
"altNames": [
"onlinesbi",
"State Bank of India"
]
},
{
"title": "SEI",
"altNames": [
@@ -1531,10 +1298,6 @@
{
"title": "Skinport"
},
{
"title": "Skyscanner",
"hex": "0770E3"
},
{
"title": "SMSPool",
"slug": "sms_pool_net",
@@ -1569,14 +1332,6 @@
"title": "Startmail",
"slug": "startmail"
},
{
"title": "State Farm",
"slug": "state_farm",
"altNames": [
"StateFarm"
],
"hex": "EDA920"
},
{
"title": "Stripchat",
"slug": "stripchat",
@@ -1590,10 +1345,6 @@
"title": "STRATO",
"hex": "FF8800"
},
{
"title": "Supercell",
"slug": "supercell"
},
{
"title": "Surfshark"
},
@@ -1611,15 +1362,6 @@
{
"title": "Tableau"
},
{
"title": "Tally.so",
"slug": "tally_so",
"altNames": [
"Tally Forms",
"Tally"
],
"hex": "000000"
},
{
"title": "TCPShield"
},
@@ -1669,14 +1411,6 @@
"title": "Temu",
"slug": "temu"
},
{
"title": "The StoryGraph",
"slug": "thestorygraph",
"altNames": [
"StoryGraph",
"TheStoryGraph"
]
},
{
"title": "tianyiyun",
"altNames": [
@@ -1692,12 +1426,6 @@
{
"title": "TorGuard"
},
{
"title": "Toyhouse",
"altNames": [
"Toyhou.se"
]
},
{
"title": "Trading 212"
},
@@ -1719,15 +1447,6 @@
"T Rowe Price Group, Inc"
]
},
{
"title": "TU Dresden",
"slug": "tu_dresden",
"altNames": [
"Technische Universität Dresden",
"Dresden University of Technology"
],
"hex": "00305d"
},
{
"title": "Tweakers"
},
@@ -1742,12 +1461,6 @@
"Twitch tv"
]
},
{
"title": "Twitter",
"altNames": [
"X"
]
},
{
"title": "Ubiquiti",
"slug": "ubiquiti",
@@ -1796,11 +1509,6 @@
"uollet.com.br"
]
},
{
"title": "VHV",
"slug": "vhv",
"altNames": ["VHV", "VHV Versicherung"]
},
{
"title": "Vikunja"
},
@@ -1818,7 +1526,7 @@
"title": "Warner Bros.",
"slug": "warner_bros",
"altNames": [
"Warner Brothers"
"Warner Brothers"
]
},
{
@@ -1831,14 +1539,6 @@
"title": "WEB.DE",
"slug": "web_de"
},
{
"title": "WeMod",
"slug": "wemod",
"altNames": [
"wemod"
],
"hex": "4B63FB"
},
{
"title": "WHMCS"
},
@@ -1848,15 +1548,6 @@
{
"title": "Wise"
},
{
"title": "WMATA",
"slug": "wmata",
"altNames": [
"Washington Metro",
"DC Metro",
"Washington Metropolitan Area Transit Authority"
]
},
{
"title": "Wolvesville"
},
@@ -1959,26 +1650,6 @@
{
"title": "Co-Wheels",
"slug": "cowheels"
},
{
"title": "Zivver",
"slug": "zivver"
},
{
"title": "Meesman Indexbeleggen",
"slug": "meesman"
},
{
"title": "Scouting Nederland",
"slug": "scoutingnederland"
},
{
"title": "ISC2",
"slug": "isc2"
},
{
"title": "Allegro",
"slug": "allegro"
}
]
}

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.7 KiB

View File

@@ -1,8 +0,0 @@
<svg version="1.2" baseProfile="tiny-ps" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1386 1594" width="1386" height="1594">
<title>logo (15)-svg copy-svg</title>
<style>
tspan { white-space:pre }
.shp0 { fill: #ff5a00 }
</style>
<path id="Layer" fill-rule="evenodd" class="shp0" d="M1385.14 634.99L1385.14 1547.13C1385.14 1553.03 1384.01 1558.88 1381.76 1564.35C1379.45 1569.82 1376.13 1574.75 1372 1578.93C1367.82 1583.11 1362.83 1586.44 1357.36 1588.69C1351.89 1590.94 1346.04 1592.12 1340.14 1592.12L570.51 1592.12C534.63 1594.16 498.65 1593.2 462.98 1589.23C427.26 1585.26 391.98 1578.29 357.44 1568.42C322.9 1558.55 289.28 1545.79 256.88 1530.35C224.49 1514.85 193.44 1496.67 164.05 1475.97C137.02 1453.77 112.73 1428.52 91.6 1400.63C70.47 1372.8 52.66 1342.56 38.61 1310.54C24.56 1278.53 14.32 1244.96 8.1 1210.59C1.82 1176.16 -0.32 1141.14 1.61 1106.29L1.61 1101.41C1.61 641.05 502.94 580.24 666.61 580.24L1046.9 580.24L1046.9 546.83C1047.7 524.84 1045.5 502.8 1040.36 481.41C1035.21 460.01 1027.22 439.42 1016.54 420.17C1005.87 400.92 992.63 383.17 977.23 367.51C961.79 351.8 944.25 338.28 925.21 327.29C785.88 256.77 512.11 282.89 283.91 423.38C278.5 428.1 271.85 431.32 264.77 432.66C257.69 434 250.34 433.47 243.53 431.05C236.72 428.64 230.66 424.46 225.99 418.93C221.38 413.41 218.27 406.76 216.98 399.63L202.99 171.03C202.99 168.08 203.31 165.18 204.06 162.34C204.76 159.5 205.88 156.77 207.33 154.19C208.73 151.67 210.5 149.31 212.53 147.22C214.62 145.13 216.93 143.31 219.45 141.8C259.67 118.58 301.4 97.99 344.3 80.24C387.26 62.49 431.29 47.59 476.17 35.63C521.12 23.67 566.75 14.71 612.82 8.76C658.89 2.86 705.33 -0.03 751.78 0.13C937.98 0.13 1138.77 54.24 1238.52 163.09C1338.32 271.95 1384.55 429.44 1384.55 636.81L1385.14 634.99ZM1046.9 858.76L687.31 858.76C410.48 858.76 355.13 1022.96 355.13 1105.05C354.87 1119.64 356.37 1134.17 359.64 1148.38C362.91 1162.59 367.9 1176.32 374.49 1189.3C381.09 1202.33 389.24 1214.45 398.84 1225.44C408.39 1236.49 419.22 1246.25 431.18 1254.61C442.71 1263.35 454.94 1271.18 467.7 1277.99C480.47 1284.8 493.71 1290.65 507.39 1295.47C521.01 1300.25 535.06 1304 549.27 1306.63C563.48 1309.26 577.91 1310.76 592.39 1311.19L1046.9 1311.19L1046.9 858.76Z" />
</svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="Layer_1" x="0" y="0" style="enable-background:new 0 0 119.2 40.4" version="1.1" viewBox="0 0 119.2 40.4"><style>.st0{fill:#004d6e}</style><path d="M119 0C85.4 9.2 64 16 48.7 32.4c7.4 3 15.1 5.9 21.9 7.9C78.5 24.7 92.8 12.1 119.2.6L119 0zM75.7 4c-4-.3-8.4-1.2-11.9-2.2C56.3 1.5 17.3.5 0 7.9c4.7 2.9 9.6 5.7 15.6 8.9C33 8.7 55.1 5.9 75.7 4.7V4z" class="st0"/><path d="M100.7 3.9c-5.4.7-14 1-19.2 1C66 6.6 38.8 11 23.3 20.5c5.7 2.9 11.4 5.7 17.5 8.2C57 14.8 78.7 8.6 100.7 4.4v-.5z" class="st0"/></svg>

Before

Width:  |  Height:  |  Size: 564 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 326.24 311.07"><path fill="#1aae5e" d="M266.38 1.26c-.93 9.12-7.71 47.21-27.28 83.44a1 1 0 0 1-1.7-.06c-4-8.24-24.86-44.58-79.29-44.91C96.71 39.35 66.67 87 66.67 87s-23.45 32.93-33.49 94.89-22.61 79-22.61 79L.39 277a2.54 2.54 0 0 0 1.11 3.67c13 5.81 72.68 30.38 151.68 30.38 53.8 0 70-7.58 74.25-10.55a.61.61 0 0 0-.35-1.12c-10.55 1.16-51.2-5.26-51.2-44 0-34.79 25.3-51.62 51.81-52.83 12.56-.58 39.35 4.74 47.72 29.3 7 20.66-2.31 39.15-5.45 44.5a.62.62 0 0 0 .77.89c9.52-3.84 53.71-25.77 55.47-93.95 1.55-59.91-47.64-85.62-70.8-86.71a1.18 1.18 0 0 1-1-1.62c6.23-15.94 45-57.27 51.84-64.46a1.57 1.57 0 0 0 0-2.17A159.05 159.05 0 0 0 268.46.17a1.42 1.42 0 0 0-2.08 1.09Z"/></svg>

Before

Width:  |  Height:  |  Size: 730 B

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 50 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 18 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 23 KiB

View File

@@ -1,13 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1000" height="584.48486" >
<g transform="translate(-137.5,-22.390163)">
<path style="fill:#1c252c" d="m 137.5,29.631487 0,252.320873 132.1114,0 c 51.99819,0 100.05059,-18.25003 100.05059,-71.85789 0,-36.24066 -26.10767,-52.7841 -54.82326,-61.4437 17.4955,-7.01771 37.3423,-21.76056 37.3423,-52.666034 0,-39.55613 -39.24823,-66.353249 -92.09117,-66.353249 l -122.58986,0 z m 80.93311,58.76577 29.75482,0 c 12.11271,0 21.34908,9.487931 21.34908,19.117473 0,8.94677 -9.59745,18.52237 -21.34908,18.52237 l -29.75482,0 0,-37.639843 z m 0,90.008333 39.27636,0 c 13.71131,0 25.21721,10.41366 25.21721,22.31611 0,12.63921 -10.76115,23.13438 -27.59759,23.13438 l -36.89598,0 0,-45.45049 z" id="path2998" />
<path id="path3005" d="m 202.9606,309.47481 0,252.32088 132.11141,0 c 51.99819,0 100.05058,-18.25004 100.05058,-71.8579 0,-36.24065 -26.10766,-52.78409 -54.82326,-61.4437 17.4955,-7.01771 37.3423,-21.76056 37.3423,-52.66603 0,-39.55613 -39.24822,-66.35325 -92.09117,-66.35325 l -122.58986,0 z m 80.93312,58.76577 29.75482,0 c 12.11271,0 21.34908,9.48793 21.34908,19.11747 0,8.94678 -9.59745,18.52238 -21.34908,18.52238 l -29.75482,0 0,-37.63985 z m 0,90.00833 39.27636,0 c 13.71131,0 25.21721,10.41366 25.21721,22.31612 0,12.6392 -10.76115,23.13437 -27.5976,23.13437 l -36.89597,0 0,-45.45049 z" style="fill:#1c252c" />
<path style="fill:#1c252c" d="m 376.01464,281.92185 0,-252.32088 203.52297,0 0,60.937872 -122.8279,0 0,33.087358 99.73816,0 0,57.12926 -99.73816,0 0,40.46655 122.8279,0 0,60.69984 z" id="path3007"/>
<path style="fill:#1c252c" d="m 689.78812,289.1442 c 57.28767,0 103.11071,-32.67744 103.11071,-85.63169 0,-85.46143 -111.17753,-72.31037 -111.17753,-98.91916 0,-10.278288 10.80934,-15.732656 21.89462,-15.732656 19.10438,0 32.9075,12.586126 32.9075,12.586126 L 784.35446,55.903565 C 765.2233,37.697019 735.00886,22.390163 694.30743,22.390163 c -61.12759,0 -101.11859,36.280243 -101.11859,80.044867 0,86.54828 109.57491,73.98694 109.57491,101.14304 0,9.51935 -9.15835,19.09619 -25.76901,19.09619 -18.85922,0 -33.79879,-11.38479 -45.42578,-21.04418 l -48.11128,45.86837 c 19.37303,18.87022 50.47517,41.64575 106.33044,41.64575 z" id="path3009" />
<path style="fill:#1c252c" d="m 855.18627,281.92185 0,-191.621047 -66.6508,0 0,-60.699833 214.23473,0 0,60.699833 -66.65082,0 0,191.621047 z" id="path3011" />
<path style="fill:#1c252c" d="m 437.90467,309.29628 80.69507,0 0,151.15449 c 0,15.34925 15.27608,29.49386 31.20285,29.49386 15.02419,0 30.2111,-12.77313 30.2111,-30.30098 l 0,-150.34737 80.45703,0 0,149.31902 c 0,59.25051 -49.19276,106.51359 -112.80036,106.51359 -63.96969,0 -109.76569,-51.43651 -109.76569,-109.74208 z" id="path3013" />
<path style="fill:#1c252c;fill-opacity:1;stroke:none" d="m 759.97084,561.61716 0,-90.16156 -94.84461,-162.15932 81.6448,0 53.66637,86.88408 53.85177,-86.88408 81.83021,0 -95.21543,163.08638 0,89.2345 z" id="path3015" />
<path style="fill:#ffed31" d="m 936.11938,447.38916 -47.60772,47.60772 0,64.27041 47.60772,47.60771 201.38062,0 0,-159.48584 z" id="path3017" />
<path style="fill:#1c252c" id="path3024" d="m 469,573.36218 c 0,2.20914 -1.79086,4 -4,4 -2.20914,0 -4,-1.79086 -4,-4 0,-2.20914 1.79086,-4 4,-4 2.20914,0 4,1.79086 4,4 z" transform="matrix(2.6779338,0,0,2.6779338,-327.65077,-1008.3244)" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="200" height="113.088"><path fill="#010202" d="M74.686 72.818H63.827l7.316-37.63h10.858l-7.315 37.63M51.347 72.818c-.029-1.263.119-2.579.372-3.894-2.821 3.235-6.185 4.442-10.023 4.442-5.212 0-9.211-2.855-8.122-8.449.862-4.445 4.896-7.405 9.024-8.613 3.778-1.095 7.65-1.536 11.368-1.756l.042-.216c.493-2.525.024-3.511-2.607-3.511-2.141 0-4.292.946-5.08 3.306l-8.331.008c1.524-7.289 8.331-9.896 15.019-9.896 3.292 0 7.429.435 9.788 2.413 3.177 2.578 2.03 6.2 1.255 10.202l-1.909 9.82c-.406 2.085-.756 4.171-.319 6.146H51.347m1.616-13.112c-2.687.274-7.234 1.097-7.896 4.498-.351 1.809.651 2.576 2.352 2.576 4.112 0 4.84-3.456 5.436-6.527l.108-.547z"/><path fill="#E31837" d="M85.378 57.216c-.512 2.657-1.031 5.336-1.031 5.336l-.042.221c-.306 1.563-.656 3.04-.601 4.403.005.129-.023.234-.145.255-.016-.074-.026-.15-.04-.224v.013a56.074 56.074 0 0 1-.78-15.303h3.926l-1.287 5.299m47.624 6.989c-.355 1.809.649 2.578 2.35 2.578 4.115 0 4.84-3.456 5.438-6.527l.108-.551c-2.686.277-7.237 1.099-7.896 4.5zm-48.881 5.273c.011.111.056.248.143.469.105.192.227.382.361.564 1.695 2.307 4.31 3.238 7.292 2.855l6.577-.825 1.524-7.84c-1.094.271-2.18.493-3.222.493-2.578 0-2.051-1.592-1.655-3.623l1.879-9.654h5.484l1.387-7.134h-5.597l1.824-9.601H90.88l-2.399 9.601h-4.667C89.287 19.691 111.632.894 138.366.894c26.742 0 49.093 18.802 54.558 43.904-1.139-.39-2.409-.562-3.633-.562-3.4 0-6.894 1.316-8.831 4.498h-.105l.764-3.952h-10.258l-5.446 28.034h10.859l3.145-16.182c.448-2.304 1.224-4.882 4.242-4.882 2.359 0 1.9 2.357 1.571 4.06l-3.307 17.004h9.926c-6.907 22.996-28.237 39.752-53.484 39.752-26.041 0-47.922-17.83-54.096-41.951a45.902 45.902 0 0 0-.398-1.292c.111-.024.213.039.248.153zM157.707 42.1h10.861l1.452-7.461h-10.863l-1.45 7.461zm-36.763 12.011c.714 0 1.373 0 2.235.016l1.911-9.778-1.46-.111c-4.271-.33-6.831 2.413-8.523 6.309h-.11l1.12-5.763h-9.27l-5.449 28.034h10.862l2.367-12.18c.318-1.645.672-3.454 1.705-4.824 1.19-1.592 2.859-1.703 4.612-1.703zm29.131 12.561 1.908-9.817c.778-4.004 1.919-7.626-1.252-10.205-2.359-1.972-6.499-2.413-9.791-2.413-6.686 0-13.492 2.607-15.017 9.896l8.331-.008c.788-2.356 2.939-3.306 5.08-3.306 2.631 0 3.098.986 2.607 3.511l-.043.216c-3.717.223-7.59.661-11.367 1.758-4.128 1.208-8.162 4.168-9.026 8.61-1.086 5.594 2.91 8.449 8.125 8.449 3.838 0 7.199-1.208 10.022-4.445-.255 1.318-.403 2.634-.374 3.896h10.479c-.436-1.974-.088-4.056.318-6.142zm12.522 6.146 5.449-28.034h-10.861l-5.449 28.034h10.861z"/><path fill="#010202" d="M22.016 34.639c-11.847 0-18.81 8.995-20.921 19.856-2.08 10.695 2.257 18.871 13.556 18.871 8.668 0 16.063-5.597 18.749-14.948H22.812c-1.163 3.578-3.108 6.282-6.422 6.282-5.209 0-4.181-6.422-3.448-10.205.693-3.564 2.438-11.41 7.54-11.41 3.648 0 4.255 3.512 3.601 7.334h10.703l.119-.696h.032c1.054-9.381-3.323-15.084-12.921-15.084"/><path fill="#E31837" d="M191.954 75.952c0-2.111 1.711-3.667 3.733-3.667 2.001 0 3.712 1.556 3.712 3.667 0 2.125-1.711 3.68-3.712 3.68-2.022 0-3.733-1.555-3.733-3.68m3.734 3.069c1.661 0 2.971-1.302 2.971-3.069 0-1.743-1.31-3.055-2.971-3.055-1.682 0-2.995 1.313-2.995 3.055-.001 1.767 1.313 3.069 2.995 3.069zm-.778-.944h-.644v-4.236h1.616c1.002 0 1.494.369 1.494 1.205 0 .759-.475 1.089-1.099 1.168l1.207 1.864h-.723l-1.114-1.835h-.738v1.834zm.767-2.381c.546 0 1.031-.037 1.031-.69 0-.525-.478-.62-.923-.62h-.875v1.31h.767z"/></svg>

Before

Width:  |  Height:  |  Size: 3.3 KiB

View File

@@ -1,71 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
version="1.1"
width="926.65619"
height="958.5625"
id="svg2"
inkscape:version="0.48.1 "
sodipodi:docname="Capcom icon.svg">
<metadata
id="metadata3015">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<sodipodi:namedview
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1"
objecttolerance="10"
gridtolerance="10"
guidetolerance="10"
inkscape:pageopacity="0"
inkscape:pageshadow="2"
inkscape:window-width="1835"
inkscape:window-height="1058"
id="namedview3013"
showgrid="false"
inkscape:zoom="0.32"
inkscape:cx="1623.239"
inkscape:cy="170.71783"
inkscape:window-x="-8"
inkscape:window-y="-8"
inkscape:window-maximized="1"
inkscape:current-layer="layer1"
fit-margin-top="0"
fit-margin-left="0"
fit-margin-right="0"
fit-margin-bottom="0" />
<defs
id="defs4" />
<g
transform="translate(2426,-55.799683)"
id="layer1">
<path
d="m -1552.0877,1007.6508 4.1189,-358.25737 -199.9062,0 c -15.7424,43.40396 -59.9402,72.71875 -113.25,72.71875 -28.0932,0 -58.13,-6.62565 -82.4688,-21.25 -31.7176,-19.0581 -55.4185,-41.69206 -74.9375,-81.90625 -15.3567,-37.21359 -27.109,-82.77963 -28.4687,-123.09375 4.6791,-79.72921 28.9019,-108.14789 73.25,-141.03125 9.8313,-7.28971 37.2996,-13.1189 45.2187,-13.15625 17.4221,-0.0822 31.9427,10.48615 39.8125,26.0625 11.4471,22.65651 -5.3079,50.1006 -21.875,69.625 l 161.625,111.34375 249.625,-261.1875 c -87.0859,-138.79748 -246.2201,-231.718747 -428.0937,-231.718747 -275.3534,0 -498.5625,212.989027 -498.5625,475.718747 0,262.72972 216.0662,461.41517 498.5625,482.84377 l 376.5933,-1.6875 c 0.2227,-314.9224 -12.7573,-290.91079 -1.2435,-5.0239 z"
id="path3840"
style="fill:#0c4da2;fill-opacity:1;stroke:none"
inkscape:connector-curvature="0"
sodipodi:nodetypes="cccssccssscccssccc" />
<path
d="m -1927.7708,145.18332 c -226.9823,1.42857 -412.3662,166.7661 -412.3662,383.05133 0,216.28523 204.6469,402.07109 452.3662,396.47808 l 240.7127,0.6783 0,-189.50724 -45.4634,0 c -14.2837,35.73115 -80.9968,70.68064 -129.3669,70.68064 -25.4902,0 -89.6606,-3.46506 -113.3988,-11.7792 -41.9106,-14.67892 -101.712,-35.75045 -153.7082,-123.14142 -13.9338,-30.6351 -53.1686,-105.28898 -44.4023,-214.19078 4.2456,-65.63495 45.9366,-147.56776 120.7486,-184.67165 32.6212,-16.17886 65.4607,-18.83348 123.1208,-13.60101 41.3957,3.75653 82.5276,32.86328 96.8886,67.79717 11.107,27.01833 7.9153,59.94169 -5.16,78.69532 -0.9328,1.33796 -0.9528,2.52293 -0.7595,3.80017 0.1471,0.97218 1.408,2.592 1.408,2.592 l 22.7845,17.79932 c 0,0 6.4866,4.50696 14.0636,4.30516 4.4004,-0.11719 12.2667,-4.89104 12.2667,-4.89104 l 130.1212,-136.55317 c -80.4452,-108.54703 -223.4056,-147.54198 -309.8556,-147.54198 z"
id="path3950"
style="fill:#ffcb08;fill-opacity:1;stroke:none"
inkscape:connector-curvature="0" />
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.6 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 5.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 16 KiB

View File

@@ -1 +0,0 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?><!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd"><svg width="100%" height="100%" viewBox="0 0 438 438" version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xml:space="preserve" xmlns:serif="http://www.serif.com/" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2;"><rect id="Artboard1" x="0" y="0" width="437.5" height="437.5" style="fill:none;"/><g id="layer101"><path d="M80.861,420.364c-4.353,-1.171 -8.1,-4.433 -10.133,-8.799l-1.102,-2.397l0.27,-99.121c0.291,-94.079 0.36,-100.573 1.396,-103.303c0.216,-0.469 -1.105,-1.372 -5.198,-3.524c-25.794,-13.562 -44.713,-37.051 -52.206,-64.809c-2.864,-10.522 -3.359,-14.797 -3.306,-28.127c0.096,-13.244 0.362,-15.721 3.139,-26.22c4.859,-18.438 14.538,-34.891 28.434,-48.251c15.784,-15.189 35.348,-24.767 57.621,-28.224c6.712,-1.041 23.289,-0.974 30.121,0.164c17.719,2.848 33.842,9.706 47.898,20.401c5.197,3.951 12.219,10.687 16.429,15.746c1.786,2.143 3.359,3.944 3.53,4.03c0.17,0.043 1.457,-1.276 2.831,-2.98c1.374,-1.703 4.464,-5.023 6.823,-7.364c16,-15.872 36.506,-26.044 59.249,-29.328c6.883,-0.998 22.306,-0.936 29.095,0.117c24.21,3.771 45.357,14.964 61.863,32.804c14.591,15.824 23.698,35.557 26.684,57.999c0.705,5.216 0.645,20.34 -0.103,25.635c-3.387,24.211 -13.551,44.465 -30.708,61.272c-8.322,8.17 -17.577,14.713 -27.465,19.501c-1.841,0.89 -2.398,1.358 -2.187,1.871c1.355,3.125 1.433,5.048 1.331,30.426c-0.056,14.056 -0.017,25.549 0.111,25.55c0.128,0 18.029,-10.353 39.741,-22.998c21.712,-12.602 40.555,-23.464 41.839,-24.057c1.969,-0.932 2.952,-1.099 6.199,-1.086c3.29,0.013 4.229,0.188 6.276,1.178c3.241,1.509 6.433,4.598 7.874,7.594l1.186,2.398l-0.204,83.099c-0.171,63.745 -0.335,83.526 -0.726,84.977c-1.733,6.188 -8.375,11.117 -14.998,11.091c-4.742,-0.019 -4.742,-0.019 -46.94,-25.012l-40.62,-24.046l-0.32,26.574c-0.309,23.754 -0.407,26.83 -1.054,28.451c-1.899,4.649 -5.458,7.967 -10.164,9.444c-2.695,0.843 -3.763,0.839 -116.64,0.344c-88.824,-0.356 -114.33,-0.586 -115.866,-1.02Zm140.434,-223.059c-0.256,-0.215 -1.661,-1.331 -3.195,-2.448c-6.858,-5.197 -12.604,-10.732 -18.726,-18.148c-1.021,-1.243 -2,-2.187 -2.128,-2.145c-0.171,0.085 -1.759,1.873 -3.562,4.002c-4.25,5.067 -10.769,11.151 -16.426,15.444l-4.585,3.442l24.524,0.098c13.458,0.054 24.31,-0.073 24.098,-0.245Zm-94.961,-25.46c25.4,-5.495 44.191,-24.646 49.163,-50.005c1.571,-8.239 1.017,-19.307 -1.512,-27.991c-5.519,-19.291 -20.708,-35.245 -39.61,-41.602c-7.594,-2.551 -10.669,-3.033 -19.726,-3.069c-8.673,-0.035 -11.751,0.38 -18.767,2.573c-19.293,5.99 -35.166,22.119 -40.926,41.621c-2.598,8.663 -3.241,19.726 -1.736,27.978c2.552,13.511 8.999,25.415 18.788,34.683c9.024,8.495 19.726,13.836 32.534,16.194c4.355,0.787 17.43,0.583 21.792,-0.382Zm167.009,0.498c5.987,-1.343 8.683,-2.315 14.804,-5.324c17.081,-8.391 28.977,-23.639 33.369,-42.847c0.87,-3.756 1.006,-5.636 1.033,-12.344c0.026,-6.707 -0.094,-8.588 -0.934,-12.351c-5.454,-24.845 -23.837,-43.29 -48.596,-48.773c-5.165,-1.174 -18.751,-1.228 -23.925,-0.096c-25.999,5.536 -45.305,25.454 -49.553,51.114c-0.831,4.91 -0.869,14.31 -0.077,19.226c4.125,26.164 24.251,46.796 50.422,51.686c6.233,1.178 17.642,1.01 23.457,-0.291Z" style="fill:#fff;fill-rule:nonzero;"/></g></svg>

Before

Width:  |  Height:  |  Size: 3.2 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="Layer_1" x="0" y="0" style="enable-background:new 0 0 83.8 44.2" version="1.1" viewBox="0 0 83.8 44.2"><style>.st0{fill:#006298}</style><g id="clipper_logo" transform="translate(-94.453 -83.393)"><path id="Path_1" d="M136.8 106.2c-.9 1.9-2.7 3.1-4.8 3.1-3 0-5.4-2.3-5.4-5.3s2.3-5.4 5.3-5.4c2.1 0 4 1.2 4.9 3.1h-2.2c-.7-.9-1.7-1.4-2.8-1.4-1.9.1-3.4 1.7-3.4 3.6 0 1.9 1.5 3.5 3.4 3.6 1 0 2-.5 2.6-1.3h2.4z" class="st0"/><path id="Path_2" d="M138.3 98.8h1.9v8.5h3.1v1.8h-5V98.8z" class="st0"/><path id="Path_3" d="M144.8 98.8h1.9v10.3h-1.9V98.8z" class="st0"/><path id="Path_4" d="M148.2 98.8h2.6c1.1-.1 2.1.2 3 .8 1.3 1.3 1.3 3.5 0 4.8-.9.6-1.9.9-3 .8h-.7v3.9h-1.9V98.8zm1.9 4.6h.6c.8 0 2.2-.1 2.2-1.4s-1.3-1.4-2.1-1.4h-.7v2.8z" class="st0"/><path id="Path_5" d="M156.3 98.8h2.6c1.1-.1 2.1.2 3 .8 1.3 1.3 1.3 3.5 0 4.8-.9.6-1.9.9-3 .8h-.7v3.9h-1.9V98.8zm1.9 4.6h.6c.8 0 2.2-.1 2.2-1.4s-1.3-1.4-2.1-1.4h-.7v2.8z" class="st0"/><path id="Path_6" d="M164.3 98.8h5.5v1.8h-3.6v2.5h3.5v1.8h-3.5v2.4h3.6v1.8h-5.5V98.8z" class="st0"/><path id="Path_7" d="M171.3 98.8h3.2c.9-.1 1.8.2 2.5.7.8.6 1.2 1.5 1.2 2.5 0 .9-.4 1.8-1 2.5-.5.4-1.1.7-1.7.8l2.8 3.8H176l-2.7-3.9v3.9h-1.9V98.8h-.1zm2 4.9h1.2c1.6 0 1.8-1 1.8-1.6s-.3-1.6-1.8-1.6h-1.2v3.2z" class="st0"/><path id="Path_8" d="M99.6 86.6c-.1-.2.1-.4.1-.4.2-.3 1.5-1.8 1.8-2.2.1-.1.2-.2.3-.2.2 0 .3.1.3.2.1.1 1.8 2.2 1.8 2.2s.2.2.1.4-.4.2-.4.2H100s-.3 0-.4-.2z" class="st0"/><path id="Path_9" d="M98.5 91.6c-.1-.2.1-.5.2-.6.4-.4 2.3-2.8 2.7-3.3.2-.2.3-.3.5-.3s.4.1.5.3c.1.1 2.7 3.3 2.7 3.3s.3.3.2.6c-.1.2-.4.3-.6.3h-5.5c-.1 0-.6 0-.7-.3z" class="st0"/><path id="Path_10" d="M97.2 98.3c-.2-.3.2-.7.2-.8.5-.6 3.2-3.8 3.8-4.5.1-.3.4-.4.7-.4.4 0 .5.3.6.4.1.1 3.8 4.5 3.8 4.5s.4.5.2.8c-.2.4-.8.4-.8.4H98s-.6 0-.8-.4z" class="st0"/><path id="Path_11" d="M94.5 100.3c-.2.5.3 1.1.4 1.3.8 1 5 6 5.9 7.1.2.4.6.6 1 .6s.8-.2 1-.6c.2-.2 5.9-7.1 5.9-7.1s.6-.7.4-1.3c-.3-.7-1.3-.7-1.3-.7h-12s-1 0-1.3.7z" class="st0"/><path id="Path_12" d="M110 88.2c-.1-.3 0-.5.2-.7.4-.5 2.7-3.2 3.1-3.8.1-.2.4-.3.6-.3.2 0 .4.1.5.3.1.1 3.1 3.8 3.1 3.8s.3.4.2.7c-.1.2-.4.4-.7.3h-6.4c.1.1-.4.1-.6-.3z" class="st0"/><path id="Path_13" d="M108.1 96.9c-.2-.4.2-.9.3-1 .6-.8 4-4.8 4.7-5.7.3-.3.4-.5.8-.5.3 0 .7.2.8.5.1.2 4.7 5.7 4.7 5.7s.5.6.3 1c-.2.3-.6.5-1 .5h-9.6s-.8.1-1-.5z" class="st0"/><path id="Path_14" d="M105.8 108.5c-.3-.6.3-1.3.4-1.4.9-1.1 5.6-6.7 6.6-7.9.4-.5.6-.7 1.2-.7.5 0 .9.3 1.1.7.2.2 6.5 7.9 6.5 7.9s.7.8.4 1.4c-.3.4-.8.7-1.4.7h-13.3c-.6.1-1.2-.2-1.5-.7z" class="st0"/><path id="Path_15" d="M101.2 112c-.2.8 0 1.6.6 2.2 1.4 1.7 8.7 10.5 10.3 12.3.4.6 1.1 1 1.8 1s1.3-.4 1.7-1c.3-.3 10.3-12.3 10.3-12.3s1.1-1.3.6-2.2c-.6-1.2-2.3-1.1-2.3-1.1h-20.9c-.9-.1-1.7.3-2.1 1.1z" class="st0"/><path id="Path_16" d="M121.6 125.7c0 1-.8 1.8-1.8 1.8s-1.8-.8-1.8-1.8.8-1.8 1.8-1.8c.9-.1 1.8.6 1.8 1.6.1.1.1.2 0 .2zm-3.2 0c0 .8.6 1.4 1.4 1.4.8 0 1.4-.6 1.4-1.4s-.6-1.4-1.4-1.4c-.8 0-1.4.6-1.4 1.4zm1.4-1c.2 0 .8 0 .8.6 0 .2-.2.4-.4.4.2 0 .4.2.4.6v.4h-.4v-.4c0-.4 0-.4-.4-.4h-.4v.8h-.4v-2.1l.8.1zm-.4.9h.4c.2 0 .4 0 .4-.4 0-.2-.2-.2-.4-.2h-.4v.6z" class="st0"/></g></svg>

Before

Width:  |  Height:  |  Size: 3.1 KiB

View File

@@ -1,27 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generator: Adobe Illustrator 22.0.1, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" viewBox="0 0 1220.8 227.9" style="enable-background:new 0 0 1220.8 227.9;" xml:space="preserve">
<style type="text/css">
.st0{fill:#0D253E;}
.st1{fill:#008AFB;}
</style>
<title>CoinTracking light</title>
<g id="Layer_2_1_">
<g id="Layer_1-2">
<path class="st0" d="M198.1,167c-30.2,0-54.7-24.5-54.7-54.7s24.5-54.7,54.7-54.7s54.7,24.5,54.7,54.7l0,0 C252.8,142.5,228.3,167,198.1,167z M198.1,81.6c-17,0-30.7,13.7-30.7,30.7s13.7,30.7,30.7,30.7s30.7-13.7,30.7-30.7l0,0 C228.8,95.4,215,81.6,198.1,81.6z"/>
<path class="st0" d="M292.2,59.5h-23.6v107.9h23.6V59.5z"/>
<path class="st0" d="M339.5,167.4h-23.8V59.5h23.8v16.2c6.2-12.5,21-18.5,33-18.5c26.1,0,41.1,16.9,41.1,47.3v62.8h-23.8v-60.1 c0-17.1-8.8-26.8-22.6-26.8c-14.1,0-27.7,7.6-27.7,28.9V167.4z"/>
<path class="st1" d="M390.6,8.2h151.7v22.9h-65.9v136.3h-25V31.1h-60.9V8.2H390.6z"/>
<path class="st1" d="M540.3,167.4h-23.8V59.5h23.8V79c7.4-13.5,15.4-19.5,29.6-21.8c7.5-1.2,15.7,1.8,19.2,4.2l-3.9,22 c-4.9-2.5-10.4-3.8-15.9-3.7c-20.3,0-28.9,20.3-28.9,49L540.3,167.4L540.3,167.4z"/>
<path class="st1" d="M680.7,151.9c-7.2,11.8-22.9,17.8-36.3,17.8c-29.1,0-54.8-21.9-54.8-56.4s25.6-56.1,54.8-56.1 c12.9,0,28.9,5.3,36.3,17.5V59.5h23.6v107.9h-23.6V151.9z M647.2,146.6c17.6,0,33.3-12.2,33.3-33.5s-17.1-32.8-33.3-32.8 c-18,0-33,12.9-33,32.8S629.2,146.6,647.2,146.6L647.2,146.6z"/>
<path class="st1" d="M778.4,57.2c17.1,0,32.6,6.7,42.7,18.7l-18.5,14.8c-5.8-6.7-14.8-10.4-24.3-10.4c-18,0-34,12.7-34,32.8 s15.9,33.7,34,33.7c9.5,0,18.5-3.9,24.3-10.6l18.7,14.6c-10.2,12-25.6,18.9-43,18.9c-31,0-57.5-22.4-57.5-56.6 S747.4,57.2,778.4,57.2z"/>
<path class="st1" d="M860.3,117.2v50.1h-23.6V0.8h23.6V95l34.2-35.6h31.9l-46,46.9l56.4,61h-30.5L860.3,117.2z"/>
<path class="st1" d="M967.4,59.5h-23.6v107.9h23.6V59.5z"/>
<path class="st1" d="M1014.7,167.4h-23.8V59.5h23.8v16.2c6.2-12.5,21-18.5,33-18.5c26.1,0,41.1,16.9,41.1,47.3v62.8H1065v-60.1 c0-17.1-8.8-26.8-22.6-26.8c-14.1,0-27.7,7.6-27.7,28.9V167.4z"/>
<path class="st1" d="M1220.2,111.5c0-12.3-4.5-24.2-12.5-33.6l13-17.1l-19.6-13l-11.9,15.7c-8.3-4.1-17.5-6.2-26.8-6.2 c-31.9,0-57.8,24.4-57.8,54.3s25.9,54.3,57.8,54.3c20.2,0,34.2,10.2,34.2,19.3s-14.1,19.3-34.2,19.3s-34.2-10.2-34.2-19.3h-23.6 c0,24,25.4,42.9,57.8,42.9s57.8-18.8,57.8-42.9c0-13.2-7.7-24.8-19.9-32.6C1212.5,142.5,1220.2,127.8,1220.2,111.5z M1128.2,111.5 c0-16.9,15.4-30.7,34.2-30.7s34.2,13.8,34.2,30.7s-15.4,30.7-34.2,30.7S1128.2,128.4,1128.2,111.5L1128.2,111.5z"/>
<path class="st0" d="M81.4,170.5C36.4,170.5,0,134,0,89c0-21.6,8.6-42.3,23.9-57.6c31.8-31.8,83.4-31.8,115.2,0l0,0l-17.7,17.7 C99.3,27,63.6,27,41.5,49.1s-22.1,57.8,0,79.9s57.8,22.1,79.9,0l17.7,17.7C123.8,162,103.1,170.6,81.4,170.5z"/>
<circle class="st0" cx="280.7" cy="15.5" r="15.5"/>
<circle class="st1" cx="954.7" cy="15.5" r="15.5"/>
</g>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 3.0 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="0 0 512 512"><path d="M63.7-161.7h-90.9v272.8h90.9zm0 363.7h363.7v-90.9H63.7zm0-363.7h363.7v-90.9H63.7z" style="fill:#8c52ff;fill-opacity:.302" transform="translate(84.664 310.016)"/><path d="M48.2-177.1h-90.9V95.6h90.9zm0 363.6h363.7V95.6H48.2zm0-363.6h363.7V-268H48.2z" style="fill:#8c52ff;fill-opacity:.502" transform="translate(71.406 296.758)"/><path d="M32.8-192.6h-90.9V80.2h90.9zm0 363.7h363.7V80.2H32.8zm0-363.7h363.7v-90.9H32.8z" style="fill:#8c52ff" transform="translate(58.147 283.5)"/></svg>

Before

Width:  |  Height:  |  Size: 574 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 7.4 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 2" viewBox="0 0 377.1 277.86"><path d="M373.15 23.32c-4-1.95-5.72 1.77-8.06 3.66-.79.62-1.47 1.43-2.14 2.14-5.85 6.26-12.67 10.36-21.57 9.86-13.04-.71-24.16 3.38-33.99 13.37-2.09-12.31-9.04-19.66-19.6-24.38-5.54-2.45-11.13-4.9-14.99-10.23-2.71-3.78-3.44-8-4.81-12.16-.85-2.51-1.72-5.09-4.6-5.52-3.13-.5-4.36 2.14-5.58 4.34-4.93 8.99-6.82 18.92-6.65 28.97.43 22.58 9.97 40.56 28.89 53.37 2.16 1.46 2.71 2.95 2.03 5.09-1.29 4.4-2.82 8.68-4.19 13.09-.85 2.82-2.14 3.44-5.15 2.2-10.39-4.34-19.37-10.76-27.29-18.55-13.46-13.02-25.63-27.41-40.81-38.67-3.57-2.64-7.12-5.09-10.81-7.41-15.49-15.07 2.03-27.45 6.08-28.9 4.25-1.52 1.47-6.79-12.23-6.73-13.69.06-26.24 4.65-42.21 10.76-2.34.93-4.79 1.61-7.32 2.14-14.5-2.73-29.55-3.35-45.29-1.58-29.62 3.32-53.28 17.34-70.68 41.28C1.29 88.2-3.63 120.88 2.39 155c6.33 35.91 24.64 65.68 52.8 88.94 29.18 24.1 62.8 35.91 101.15 33.65 23.29-1.33 49.23-4.46 78.48-29.24 7.38 3.66 15.12 5.12 27.97 6.23 9.89.93 19.41-.5 26.79-2.02 11.55-2.45 10.75-13.15 6.58-15.13-33.87-15.78-26.44-9.36-33.2-14.54 17.21-20.41 43.15-41.59 53.3-110.19.79-5.46.11-8.87 0-13.3-.06-2.67.54-3.72 3.61-4.03 8.48-.96 16.72-3.29 24.28-7.47 21.94-12 30.78-31.69 32.87-55.33.31-3.6-.06-7.35-3.86-9.24ZM181.96 235.97c-32.83-25.83-48.74-34.33-55.31-33.96-6.14.34-5.04 7.38-3.69 11.97 1.41 4.53 3.26 7.66 5.85 11.63 1.78 2.64 3.01 6.57-1.78 9.49-10.57 6.58-28.95-2.2-29.82-2.64-21.38-12.59-39.26-29.24-51.87-52.01-12.16-21.92-19.23-45.43-20.39-70.52-.31-6.08 1.47-8.22 7.49-9.3 7.92-1.46 16.11-1.77 24.03-.62 33.49 4.9 62.01 19.91 85.9 43.63 13.65 13.55 23.97 29.71 34.61 45.49 11.3 16.78 23.48 32.75 38.97 45.84 5.46 4.59 9.83 8.09 14 10.67-12.59 1.4-33.62 1.71-47.99-9.68Zm15.73-101.32c0-2.7 2.15-4.84 4.87-4.84.6 0 1.16.12 1.66.31.67.25 1.29.62 1.77 1.18.87.84 1.36 2.08 1.36 3.35 0 2.7-2.15 4.84-4.85 4.84s-4.81-2.14-4.81-4.84Zm48.86 25.12c-3.13 1.27-6.26 2.39-9.27 2.51-4.67.22-9.77-1.68-12.55-4-4.3-3.6-7.36-5.61-8.67-11.94-.54-2.7-.23-6.85.25-9.24 1.12-5.15-.12-8.44-3.74-11.44-2.96-2.45-6.7-3.1-10.82-3.1-1.54 0-2.95-.68-4-1.24-1.72-.87-3.13-3.01-1.78-5.64.43-.84 2.53-2.92 3.02-3.29 5.58-3.19 12.03-2.14 18 .25 5.54 2.26 9.71 6.42 15.72 12.28 6.16 7.1 7.26 9.09 10.76 14.39 2.76 4.19 5.29 8.47 7.01 13.37 1.04 3.04-.31 5.55-3.94 7.1Z" data-name="Layer 1" style="fill:#4d6bfe;stroke-width:0"/></svg>

Before

Width:  |  Height:  |  Size: 2.3 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" viewBox="18.5 18.2 162.9 163.7"><path fill="#FFF" d="m71 70.9 49.6-49.6c3.7-3.7 7.9-4.4 12.4 0l46.1 46.1c3.3 3.3 3 8.3 0 11.3L78.8 178.9c-3.6 3.6-8.3 4.2-12.5 0l-45.1-45.1c-3.6-3.6-3.3-9.3 0-12.6L71 70.9z"/><path fill="#006491" d="m71.8 76 51.9 51.9-47.2 47.2c-2.9 2.9-5.9 3-8.9 0l-43.2-43.2c-2.7-2.7-2.5-5.7 0-8.2L71.8 76z"/><path fill="#E31837" d="M127 124.8 75.1 72.9l47.2-47.2c2.9-2.9 5.9-3 8.9 0l43.2 43.2c2.7 2.7 2.5 5.7 0 8.2L127 124.8z"/><circle cx="126.7" cy="73" r="12.8" fill="#FFF"/><circle cx="90.8" cy="127.9" r="12.8" fill="#FFF"/><circle cx="53.4" cy="127.9" r="12.8" fill="#FFF"/></svg>

Before

Width:  |  Height:  |  Size: 664 B

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="Layer_1" x="0" y="0" style="enable-background:new 0 0 516.2 100" version="1.1" viewBox="0 0 516.2 100"><style>.st0{fill:#ef6a00}</style><path d="M36.3 2.1H15.4C6.5 2.1 0 8.6 0 17.5v65.1C0 91.5 6.5 98 15.4 98h20.9C66.1 97.9 87 78.2 87 50S66.1 2.1 36.3 2.1zm1 70.4H26.6v-45h10.7c13.6 0 23.1 9.2 23.1 22.5s-9.5 22.5-23.1 22.5zM176.6 13.6C176.6 5.7 171 0 163.3 0 155.6 0 150 5.8 150 13.6v44.7c0 8.6-6.5 15.4-14.8 15.4s-14.8-6.8-14.8-15.4V13.6c0-7.9-5.6-13.6-13.3-13.6-7.7 0-13.3 5.7-13.3 13.6v45.9c0 23.9 17 40.5 41.4 40.5s41.4-16.7 41.4-40.5V13.6zM352.7 75.2l-22.6-25.6 21.1-24.7c3.1-3.6 4.7-7.2 4.7-10.5 0-8-6.2-14.4-14-14.4-4 0-7.7 2.2-11.4 6.7l-23.8 31.9v-25c0-8.1-5.4-13.6-13.3-13.6-8 0-13.3 5.5-13.3 13.6v72.8c0 8.1 5.4 13.6 13.3 13.6 8 0 13.3-5.5 13.3-13.6V61.2l25.6 32.5c3.7 4.5 6.9 6.3 10.9 6.3 7.9 0 13.6-6 13.6-14.4 0-3.7-1.5-7.5-4.1-10.4zM390.2 13.6c0-8.1-5.4-13.6-13.3-13.6-8 0-13.3 5.5-13.3 13.6v72.8c0 8.1 5.4 13.6 13.3 13.6 8 0 13.3-5.5 13.3-13.6V13.6z" class="st0"/><path d="M516.1 14.4c.9-7.4-4.6-12-10.2-12.7-4.7-.6-8.2.9-10.6 4.2-1.8 2.5-2.9 6.2-3.6 12.1-.7 6.1-.6 10.2.2 12.9 1.2 3.6 4 5.8 7.8 6.3 7.2.8 10.7-5 14.8-16.8.8-2.5 1.5-4.8 1.6-6z" style="fill:#c63663"/><path d="M212.8 49.2v37.2c0 8.1-5.4 13.6-13.3 13.6-8 0-13.3-5.5-13.3-13.6V13.6c0-8.1 5.4-13.6 13.3-13.6 3.8 0 7.3 1.4 9.4 3.5 2 2.1 35.5 47.3 35.5 47.3V13.6c0-8.1 5.4-13.6 13.3-13.6 8 0 13.3 5.5 13.3 13.6v72.8c0 8.1-5.4 13.6-13.3 13.6-3.8 0-7.3-1.4-9.4-3.5-2.2-2.1-35.5-47.3-35.5-47.3zM426.1 49.2v37.2c0 8.1-5.4 13.6-13.3 13.6-8 0-13.3-5.5-13.3-13.6V13.6c0-8.1 5.4-13.6 13.3-13.6 3.8 0 7.3 1.4 9.4 3.5 2 2.1 35.5 47.3 35.5 47.3V13.6C457.7 5.5 463 0 471 0s13.3 5.5 13.3 13.6v72.8c0 8.1-5.4 13.6-13.3 13.6-3.8 0-7.3-1.4-9.4-3.5-2.1-2.1-35.5-47.3-35.5-47.3zM498.4 90.1h-2.2c-.4 0-.7.3-.7.7v5.3c0 .4.3.7.7.7.4 0 .7-.3.7-.7v-1.7h.9l1.6 2.2c.1.2.4.3.6.3.4 0 .7-.3.7-.7 0-.2-.1-.3-.3-.6l-1-1.4.3-.2c.5-.4.8-1 .8-1.7 0-1.3-.9-2.2-2.1-2.2zm-.6 3.3h-1v-2.3h1c.7 0 1.2.5 1.2 1.1s-.4 1.2-1.2 1.2z" class="st0"/><path d="M497.8 86.9c-3.7 0-6.7 2.9-6.7 6.5s3 6.5 6.7 6.5 6.7-2.9 6.7-6.5c.1-3.5-2.9-6.5-6.7-6.5zm0 11.9c-3 0-5.4-2.4-5.4-5.4 0-3 2.4-5.4 5.4-5.4 3 0 5.4 2.4 5.4 5.4 0 3-2.4 5.4-5.4 5.4z" class="st0"/></svg>

Before

Width:  |  Height:  |  Size: 2.2 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" fill="none"><g clip-path="url(#a)"><path fill="#19BA19" d="M64 128c35.3462 0 64-28.6538 64-64 0-35.3462-28.6538-64-64-64C28.6538 0 0 28.6538 0 64c0 35.3462 28.6538 64 64 64Z"/><path fill="#fff" d="M96.6725 54.9921a2.4812 2.4812 0 0 0 0-3.51l-20.25-20.25a2.4822 2.4822 0 0 0-1.755-.7272 2.4807 2.4807 0 0 0-1.755.7272l-7.25 7.25a2.4812 2.4812 0 0 1-3.51 0l-7.195-7.22a2.4822 2.4822 0 0 0-1.755-.7272 2.4804 2.4804 0 0 0-1.755.7272l-20.2212 20.25a2.4802 2.4802 0 0 0-.7273 1.755 2.4812 2.4812 0 0 0 .7273 1.755l7.25 7.25a2.4815 2.4815 0 0 1 0 3.51l-7.25 7.1863a2.4809 2.4809 0 0 0 0 3.51l20.25 20.25a2.4822 2.4822 0 0 0 1.755.7272 2.4807 2.4807 0 0 0 1.755-.7272l7.25-7.25a2.4809 2.4809 0 0 1 3.51 0l7.25 7.25a2.4822 2.4822 0 0 0 1.755.7272 2.4807 2.4807 0 0 0 1.755-.7272l20.25-20.25a2.4826 2.4826 0 0 0 .7272-1.755 2.4809 2.4809 0 0 0-.7272-1.755l-7.25-7.25a2.4824 2.4824 0 0 1-.7273-1.755 2.4809 2.4809 0 0 1 .7273-1.755l7.1662-7.2088v-.0075ZM82.0663 67.9596c0 7.7875-6.35 14.1375-14.1375 14.1375h-7.955c-7.7875 0-14.1375-6.35-14.1375-14.1375v-7.96c0-7.7875 6.35-14.1375 14.1375-14.1375h7.955c7.7875 0 14.1375 6.35 14.1375 14.1375v7.96Z"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h128v128H0z"/></clipPath></defs></svg>

Before

Width:  |  Height:  |  Size: 1.3 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" id="Layer_1" x="0" y="0" style="enable-background:new 0 0 77.8 99.5" version="1.1" viewBox="0 0 77.8 99.5"><style>.st3{fill:#e63888}.st4{fill:#1d4f91}</style><path d="M37.4 23.4h11.2c3.4 0 6.1-2.7 6.1-6.1V6.1C54.7 2.7 52 0 48.6 0H37.4c-3.4 0-6.1 2.7-6.1 6.1v11.2c.1 3.4 2.7 6.1 6.1 6.1z" style="fill:#426da9"/><path d="M26.4 29.2c0-3.8-3.1-6.9-6.9-6.9H6.9c-3.8 0-6.9 3.1-6.9 6.9v12.7c0 3.7 3.1 6.8 6.9 6.8h12.6c3.8 0 6.9-3 6.9-6.8V29.2z" style="fill:#6d2077"/><path d="M18.3 58.9h-7.8c-2.3 0-4.2 1.9-4.2 4.2v7.8c0 2.3 1.9 4.2 4.2 4.2h7.8c2.3 0 4.2-1.9 4.2-4.2v-7.8c0-2.3-1.9-4.2-4.2-4.2z" style="fill:#af1685"/><path d="M72.7 14.9h-6.4c-1.9 0-3.4 1.5-3.4 3.4v6.4c0 1.9 1.5 3.4 3.4 3.4h6.4c1.9 0 3.5-1.6 3.4-3.4v-6.4c-.1-1.9-1.5-3.4-3.4-3.4zM39.1 80.5H30c-2.8 0-5 2.3-5 5v9.2c0 2.7 2.3 4.9 5 4.9h9.2c2.7 0 5-2.2 5-5v-9.1c-.1-2.8-2.4-5-5.1-5z" class="st3"/><path d="M52.7 36.4c-10.2 0-18.3 8.2-18.3 18.2 0 10.1 8.1 18.3 18.1 18.3h.2c4.9 0 9.5-1.9 12.6-5.2.6-.6 1.1-1.4 1.1-2.3 0-1.6-1.4-3.1-3.1-3.1-.9 0-1.8.6-2.4 1.2-2.1 2.2-5.1 3.2-8.3 3.2-6.1 0-11-4.2-12.1-10H68.2c.1 0 .2 0 .3-.1 1.5-.4 2.4-1.7 2.4-3.1-.1-9.1-8.5-17.1-18.2-17.1zM41 50.9c1.6-4.9 6.2-8.5 11.7-8.5 5.5 0 10.1 3.5 11.6 8.5H41zM71 72.5c-.2 0-.4-.2-.4-.4v-3.9h-.8c-.2 0-.4-.2-.4-.4s.2-.4.4-.4h2.5c.2 0 .4.2.4.4s-.2.4-.4.4h-.9v3.9c0 .2-.1.4-.4.4zm4.6 0c-.2 0-.3-.2-.4-.3L74.1 69v3.2c0 .2-.2.4-.4.4s-.4-.2-.4-.4V68c0-.3.3-.6.6-.6.2 0 .5.2.5.5l1.1 3.2 1.1-3.2c.1-.2.3-.4.5-.5.3 0 .6.3.6.6v4.2c0 .2-.2.4-.4.4s-.4-.2-.4-.4V69l-.6 1.9-.3 1.3c-.1.2-.2.3-.4.3z" class="st4"/></svg>

Before

Width:  |  Height:  |  Size: 1.6 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0.87 0.06 173.29 236.52"><path fill="#fff" d="M168.646.176C107.411 11.96 51.294 28.372 4.097 51.181a5.72 5.72 0 0 0-3.232 5.05v116.99a31.48 31.48 0 0 0 15.721 27.253l55.175 31.899a31.52 31.52 0 0 0 31.459 0l55.209-31.899a31.48 31.48 0 0 0 15.721-27.253V4.637a4.478 4.478 0 0 0-5.504-4.46"/><path fill="#0068AD" d="M161.966 9.91c-56.193 10.812-107.69 25.873-151 46.804a5.25 5.25 0 0 0-2.965 4.634v107.357a28.89 28.89 0 0 0 14.426 25.008l50.632 29.273a28.94 28.94 0 0 0 28.868 0l50.663-29.273a28.88 28.88 0 0 0 14.426-25.008V14.003a4.108 4.108 0 0 0-5.05-4.094"/><path fill="#fff" d="M161.966 9.91c-25.965 5.004-50.864 10.951-74.465 17.918v198.988a28.8 28.8 0 0 0 14.426-3.83l50.663-29.273a28.88 28.88 0 0 0 14.426-25.008V14.003a4.108 4.108 0 0 0-5.05-4.094" opacity=".07"/><path fill="#020404" d="M132.912 40.71c-39.217 5.067-75.13 14.768-105.357 27.805a3.51 3.51 0 0 0-2.07 3.09v25.95a.62.62 0 0 1 .356-.571c31.417-13.717 69.136-23.835 110.392-28.901h.185V43.8a3.08 3.08 0 0 0-1.047-2.346 3.1 3.1 0 0 0-2.459-.744M93.803 87.175a345 345 0 0 0-66.325 19.371 3.4 3.4 0 0 0-2.008 3.089v25.951a.54.54 0 0 1 .34-.54 342.3 342.3 0 0 1 67.962-20.081z" opacity=".29"/><path fill="#fff" d="M137.144 32.987C96.398 40.849 59.05 53.068 27.633 68.283a3.82 3.82 0 0 0-2.147 3.322v25.95a.65.65 0 0 1 .37-.587C58.51 80.95 97.742 68.114 140.62 60.144l.201-.093V35.953a3 3 0 0 0-1.114-2.38 3 3 0 0 0-2.562-.586M98.53 80.193a421.7 421.7 0 0 0-70.96 26.26 3.8 3.8 0 0 0-2.147 3.352v25.936a.63.63 0 0 1 .372-.587 418.6 418.6 0 0 1 72.734-27.11z"/><path fill="#020404" d="M52.3 138.027a244 244 0 0 0-24.961 6.627 2.975 2.975 0 0 0-1.854 2.935v25.966a.51.51 0 0 1 .31-.51 239 239 0 0 1 26.505-7.213z" opacity=".29"/><path fill="#fff" d="M56.625 131.709c-10.117 3.877-19.88 8.032-28.992 12.497a3.82 3.82 0 0 0-2.147 3.367v25.982a.65.65 0 0 1 .37-.587c9.685-4.742 19.987-9.191 30.769-13.331z"/></svg>

Before

Width:  |  Height:  |  Size: 1.9 KiB

View File

@@ -1 +0,0 @@
<svg xmlns="http://www.w3.org/2000/svg" xml:space="preserve" style="fill-rule:evenodd;clip-rule:evenodd;stroke-linejoin:round;stroke-miterlimit:2" viewBox="0 0 300 300"><path d="M.017 300.002h299.995V0H.017z"/><path d="M108.4 93.8a47.14 47.14 0 0 1-31 14.5V93.8h31Zm-50.1 14.5c-12.2-.8-23.1-6.2-31.1-14.5h31.1v14.5ZM135.6 0H67.9C30.4 0 0 30.3 0 67.8s30.4 67.9 67.9 67.9c35.9 0 65.2-27.8 67.7-63.1V0Z" style="fill:#00e205;fill-rule:nonzero" transform="translate(25 24.908) scale(1.84366)"/></svg>

Before

Width:  |  Height:  |  Size: 495 B

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 18 KiB

Some files were not shown because too many files have changed in this diff Show More