[READ ONLY MIRROR] Open Source TikTok alternative built on AT Protocol github.com/sprksocial/client
flutter atproto video dart
10
fork

Configure Feed

Select the types of activity you want to include in your feed.

docs: contributing.md

+93 -93
+62
CONTRIBUTING.md
··· 1 + # Contributing to Spark Client 2 + 3 + Thank you for your interest in contributing to Spark! 4 + 5 + ## How to Contribute 6 + 7 + 1. **Keep changes scoped** to the feature you are editing 8 + 2. **Run format, codegen (if needed), and analyze** before opening a PR 9 + 3. **Test on a real device or simulator** and add screenshots when applicable. 10 + 11 + ## Development 12 + 13 + ### Prerequisites 14 + 15 + - Flutter SDK 3.41+ 16 + - Dart SDK matching Flutter toolchain 17 + - Xcode (for iOS builds) and/or Android SDK 18 + 19 + ### Setup 20 + 21 + From repository root: 22 + 23 + ```bash 24 + touch .env 25 + flutter pub get --enforce-lockfile # install dependencies 26 + dart run build_runner build --delete-conflicting-outputs # generated code 27 + flutter run 28 + ``` 29 + 30 + ### Before Submitting 31 + 32 + 1. Format your code: 33 + ```bash 34 + dart format . 35 + ``` 36 + 37 + 2. Analyze for issues: 38 + ```bash 39 + flutter analyze . 40 + ``` 41 + 42 + 3. If you changed annotations/models, regenerate code: 43 + ```bash 44 + dart run build_runner build --delete-conflicting-outputs 45 + ``` 46 + 47 + ### Pull Request Guidelines 48 + 49 + 1. Make your changes following the codebase conventions 50 + 2. Ensure CI passes (format check, analyze, build) 51 + 4. Use conventional commit titles. e.g. "fix: remove misshapen meatballs" or 52 + "feat(fruit): add strawberries" 53 + 54 + ## Code Conventions 55 + 56 + - Prefer `package:spark/...` imports; avoid deep relative imports 57 + - Import order: Dart SDK, third-party, project; keep `part` after imports 58 + - Use strong explicit types; avoid `dynamic` 59 + - Use Freezed for immutable models and `@riverpod` for providers 60 + - Naming: types `PascalCase`, members/providers `lowerCamelCase`, private 61 + `_name` 62 + - Keep feature flow: external/API/storage -> repository -> provider -> widget
+31 -93
README.md
··· 1 - # Spark Client 2 - 3 - Flutter client for Spark social. This repository contains the production mobile app, 4 - plus workspace packages used by the app (assets, fonts, and widgetbook). 5 - 6 - ## What This Repo Contains 7 - 8 - - `spark` app package at repo root (`pubspec.yaml`) 9 - - Flutter workspace members: 10 - - `widgetbook` (component/dev preview package) 11 - - `fonts` (shared font package) 12 - - `assets` (shared assets package) 13 - 14 - The app is organized with a feature-first structure and uses Riverpod + GetIt + 15 - Freezed + AutoRoute. 16 - 17 - ## Tech Stack 18 - 19 - - Flutter / Dart 20 - - Riverpod (with code generation) 21 - - GetIt for dependency injection 22 - - Freezed + json_serializable for immutable models 23 - - AutoRoute for navigation 24 - - AT Protocol client libraries (`atproto`, `bluesky`) 25 - 26 - ## Prerequisites 27 - 28 - - Flutter SDK (CI uses stable `3.41.3`) 29 - - Dart SDK matching Flutter toolchain 30 - - Xcode (for iOS builds) and/or Android SDK 31 - 32 - ## Quick Start 33 - 34 - From repository root: 35 - 36 - ```bash 37 - touch .env 38 - flutter pub get --enforce-lockfile 39 - dart run build_runner build --delete-conflicting-outputs 40 - flutter run 41 - ``` 1 + # Spark Social App 42 2 43 - ## Common Commands 3 + Welcome to the codebase for the Spark Social mobile app. 44 4 45 - ### Dependencies and codegen 5 + Get the Spark Social app: 46 6 47 - ```bash 48 - flutter pub get --enforce-lockfile 49 - dart run build_runner build --delete-conflicting-outputs 50 - dart run build_runner watch --delete-conflicting-outputs 51 - ``` 52 - 53 - ### Lint and format 54 - 55 - ```bash 56 - flutter analyze lib 57 - flutter analyze . 58 - dart format . 59 - dart format --set-exit-if-changed . 60 - ``` 61 - 62 - ### Tests 7 + - iOS 8 + - Android 63 9 64 - No tests are currently committed, but these are the standard commands: 10 + ## Overview 65 11 66 - ```bash 67 - flutter test 68 - flutter test test/path/to/some_test.dart 69 - flutter test test/path/to/some_test.dart --plain-name "does something specific" 70 - ``` 12 + This repo contains the mobile client for Spark Social. This is a Flutter app, 13 + written in Dart, using MaterialApp as its base. 71 14 72 - For `widgetbook` (run inside `widgetbook/`): 15 + Spark is an open source shortform social app for photos and videos built on AT 16 + Protocol. It's an open alternative to closed platforms like Instagram and 17 + Tiktok. 73 18 74 - ```bash 75 - flutter test 76 - ``` 19 + We support stories, reusable sounds, DMs, and we have a built-in photo and video 20 + editor powered by [pro_image_editor](https://github.com/hm21/pro_image_editor). 77 21 78 - ### Builds 22 + ## Structure 79 23 80 - ```bash 81 - flutter build appbundle 82 - flutter build apk 83 - flutter build ios --no-codesign 84 - ``` 24 + The app is organized with a feature-first structure and uses Riverpod + GetIt + 25 + Freezed + AutoRoute. We also utilize the open source 26 + [atproto.dart](https://github.com/myConsciousness/atproto.dart) client 27 + libraries. 85 28 86 - ## Project Layout 29 + ### Project Layout 87 30 88 31 ```text 89 32 lib/ ··· 100 43 assets/ # local assets package 101 44 ``` 102 45 103 - ## Architecture Notes 46 + ## Resources 104 47 105 - - Prefer package imports (`package:spark/...`) for app code. 106 - - Typical flow is: external/API/storage -> repository -> provider -> widget. 107 - - Providers are generated with `@riverpod`; immutable state is typically Freezed. 108 - - Generated files (`*.g.dart`, `*.freezed.dart`, `*.gr.dart`) should not be edited manually. 48 + Spark Social is built on [AT Protocol](https://atproto.com/), a protocol for 49 + decentralized social networks. This allows for unprecidented amounts of 50 + user-autonomy and data ownership, and ensures no one entity is in charge of the 51 + network. 109 52 110 - ## CI Overview 53 + The lexicon schemas for the records published and APIs used by this app are 54 + under the `so.sprk.*` namespace. 111 55 112 - - Lint workflow runs codegen, then `flutter analyze`. 113 - - Android internal release workflow runs codegen, config setup, then `flutter build appbundle`. 114 - 115 - See: 116 - 117 - - `.github/workflows/flutter_lint.yml` 118 - - `.github/workflows/android-internal-release.yml` 56 + The API server or "AppView" this app uses can be found in the 57 + [server repo](https://github.com/sprksocial/server), and contains the 58 + `sprk.so.*` lexicon schemas used in this client. 119 59 120 60 ## Contributing 121 61 122 - 1. Keep changes scoped to the feature you are editing. 123 - 2. Run format, codegen (if needed), and analyze before opening a PR. 124 - 3. Do not commit secrets (`.env`, signing keys, service credentials). 62 + See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines. 125 63 126 64 ## License 127 65 128 - MIT. See `LICENSE`. 66 + MIT Licensed. See [LICENSE](LICENSE).