Native iOS app for location-based check-ins using the AT Protocol
Drop anchor at your favorite places with structured data storage on your home PDS and optional social sharing via Bluesky.
- π± Native iOS App - Full-featured mobile experience with native location services
- π StrongRef Architecture - Store address records and check-ins with content integrity on your home PDS
- π‘ Optional Social Sharing - Choose to share check-ins as posts on Bluesky to notify your followers
- π Global Feed - Discover check-ins from around the world via the Anchor AppView feed
- π Automatic Location - CoreLocation integration with proper iOS permissions
- πΊοΈ Place Discovery - Find nearby climbing gyms, cafes, and points of interest via OpenStreetMap
- π¬ Custom Messages - Add personal notes to your check-ins
- ποΈ Modular Architecture - Shared AnchorKit framework for future platform expansion
- π― Privacy-First - All data stored on your own PDS, no tracking or analytics
- π AT Protocol Native - Uses community lexicon standards for structured location data
Global feed, check-in interface, nearby places discovery, and message composition
- iOS: iOS 18.6 or later
- Location Services enabled
-
Download from App Store
Available now on the iOS App Store
-
Build from Source
# Clone the repository git clone https://github.com/tijs/Anchor.git cd Anchor # Open in Xcode and build open Anchor/Anchor.xcodeproj # Or build from command line xcodebuild -project Anchor/Anchor.xcodeproj -scheme AnchorMobile build -destination 'platform=iOS Simulator,name=iPhone 16'
- Launch Anchor - Tap the Anchor app icon
- Browse Global Feed - See check-ins from around the world on the Feed tab
- Enable Location Services - Allow location access when prompted for check-ins
- Sign in to Bluesky - Enter your Bluesky credentials in Settings to create check-ins
- Drop Your First Anchor - Tap "Check In" to discover and check in at nearby places
The fastest way to check in:
- Open the Anchor app
- Tap "Check In" tab
- Select a nearby place and drop anchor
- Optional: Toggle "Also post to Bluesky" to share with your followers
Note: All check-ins are stored on your home PDS using StrongRef architecture regardless of your Bluesky posting preference. The optional Bluesky post is separate from your structured check-in data.
Anchor uses a StrongRef-based architecture that stores structured address and check-in records on your Personal Data Server (PDS) with content integrity verification:
Venue information is stored separately as reusable address records using community lexicon standards:
{
"$type": "community.lexicon.location.address",
"name": "Klimmuur Centraal",
"street": "Stationsplein 45",
"locality": "Utrecht",
"region": "UT",
"country": "NL",
"postalCode": "3511ED"
}
Check-ins reference address records via StrongRef with content integrity verification:
{
"$type": "app.dropanchor.checkin",
"text": "Great lunch session with the team!",
"createdAt": "2024-12-29T14:30:00Z",
"addressRef": {
"uri": "at://did:plc:user123/community.lexicon.location.address/abc123",
"cid": "bafyreigh2akiscaildc..."
},
"coordinates": {
"$type": "community.lexicon.location.geo",
"latitude": "52.0705",
"longitude": "4.3007"
}
}
When you enable "Also post to Bluesky", Anchor creates rich posts on your Bluesky feed to notify your followers:
What you see on Bluesky:
Dropped anchor at Klimmuur Centraal π§
"Great lunch session with the team!" π§ββοΈ
Under the hood (app.bsky.feed.post
):
{
"$type": "app.bsky.feed.post",
"text": "Dropped anchor at Klimmuur Centraal π§\n\"Great lunch session with the team!\" π§ββοΈ",
"createdAt": "2024-12-29T14:30:00Z",
"facets": [
{
"index": { "byteStart": 17, "byteEnd": 35 },
"features": [{
"$type": "app.bsky.richtext.facet#link",
"uri": "https://www.openstreetmap.org/way/123456"
}]
}
]
}
This StrongRef-based approach provides powerful benefits:
- π Content Integrity - CID verification ensures address records haven't been tampered with
- β»οΈ Data Efficiency - Reusable address records reduce storage duplication
- π Self-Contained - All data stored on your home PDS with no external dependencies
- π Optional Social Sharing - Choose when to share check-ins as Bluesky posts
- π Rich Query Capability - Structured data enables powerful future features
- π Privacy Control - Your data stays on your PDS unless you choose to share
- π AT Protocol Native - Uses community lexicon standards for interoperability
- π‘οΈ Standards Compliant - Follows AT Protocol best practices for record linking
Anchor is built with a modular architecture designed for cross-platform expansion:
- AnchorMobile (iOS App) - Native iOS app built with SwiftUI
- AnchorKit - Shared business logic framework for future platform expansion
- Anchor AppView - Global feed service aggregating check-ins from across the AT Protocol network
- Swift 6 - Modern async/await concurrency with strict concurrency checking
- SwiftUI - Native iOS user interface with NavigationStack and TabView
- AT Protocol - StrongRef-based record architecture with content integrity verification
- Community Lexicon - Uses
community.lexicon.location.*
standards for structured address data - CoreLocation - Native location services with proper iOS permission handling
- Overpass API - Rich OpenStreetMap place data via
overpass.private.coffee
Anchor/
βββ Anchor.xcodeproj # Xcode project
βββ AnchorMobile/ # iOS App
β βββ Assets.xcassets/ # iOS assets and icons
β βββ Features/ # SwiftUI views organized by feature
β β βββ CheckIn/Views/ # Mobile check-in interface
β β βββ Feed/Views/ # Feed and timeline views
β β βββ Settings/Views/ # iOS settings views
β βββ AnchorMobileApp.swift # iOS app entry point
βββ AnchorKit/ # Shared Business Logic Package
β βββ Sources/AnchorKit/
β β βββ Models/ # Place, AuthCredentials, Settings
β β βββ Services/ # Overpass, Location, Feed services
β β βββ ATProtocol/ # AT Protocol client implementations
β β βββ Stores/ # CheckIn, Auth, and data stores
β β βββ Utils/ # Shared utilities and configuration
β βββ Tests/ # Unit tests (46+ tests)
βββ Static/ # Assets and documentation
Note: Anchor AppView backend is a separate project available at https://anchor-feed-generator.val.run
The shared framework can be built and tested independently:
cd AnchorKit
swift build
swift test # Runs 46+ tests including StrongRef integration
# Using Xcode (recommended)
open Anchor/Anchor.xcodeproj
# Using xcodebuild
xcodebuild -project Anchor/Anchor.xcodeproj -scheme AnchorMobile build -destination 'platform=iOS Simulator,name=iPhone 16'
# Test AnchorKit (includes StrongRef and AT Protocol client tests)
cd AnchorKit && swift test
# Test the iOS app
xcodebuild -project Anchor/Anchor.xcodeproj -scheme AnchorMobile test -destination 'platform=iOS Simulator,name=iPhone 16'
Anchor AppView is a separate project that provides the global feed service. You can explore it at: https://anchor-feed-generator.val.run
- Your Data, Your PDS - All check-in data stored on your home Personal Data Server
- No Analytics - Zero tracking, telemetry, or user behavior monitoring
- Minimal Permissions - Only requests location access when needed for check-ins
- Secure Authentication - Bluesky credentials handled via AT Protocol best practices
- Privacy by Choice - Decide for each check-in whether to share publicly or keep private
- Open Source - Complete transparency with public source code
- Native iOS App - Full iOS app using SwiftUI with TabView navigation
- App Store Release - Available now on the iOS App Store
- StrongRef Architecture - Atomic address + checkin records with content integrity on home PDS
- Optional Social Sharing - Choose to share check-ins as Bluesky posts
- Global Feed - Discover check-ins from around the world via Anchor AppView
- Community Lexicon Integration - Uses AT Protocol standards for structured location data
- Content Integrity - CID verification prevents tampering and detects modifications
- Location services integration with proper iOS permissions
- Nearby place discovery via OpenStreetMap with distance-based sorting
- Modular AnchorKit architecture for future platform expansion
- Check-in history view (personal timeline from your PDS)
- Default message preferences and user settings
- Feed filtering options (nearby, following, categories)
- Enhanced place categorization and discovery
- macOS App - Native menubar app using shared AnchorKit
- Apple Watch App - Quick drops from your wrist
- Rich Analytics - Personal insights from StrongRef-structured check-in data
- Shortcuts Integration - Automate check-ins
- Federation - Connect with other Anchor instances
- Social Features - Follow friends' check-ins across the AT Protocol network
We welcome contributions! The modular architecture makes it easy to contribute to specific areas:
- AnchorKit - Business logic, models, and services
- iOS App - Mobile interface and iOS-specific features
- Documentation - Help improve guides and API docs
Please check our Contributing Guidelines before submitting pull requests.
This app was developed with assistance from Claude Code, Anthropic's AI coding assistant, under human oversight and direction. While AI helped with code generation, architecture decisions, and implementation, all design choices, feature specifications, and quality control were guided by human developers.
MIT License - see LICENSE for details.
- Bluesky: @anchor.app - Follow us for updates
- AT Protocol: atproto.com - Learn about the decentralized web
- OpenStreetMap: openstreetmap.org - The collaborative mapping project powering our place data
Made with β€οΈ for the climbing and outdoor community
Join the decentralized social web and start dropping anchors at your favorite places today.