Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
55 commits
Select commit Hold shift + click to select a range
2f0e062
fix api call for empty response post request
Daggerpov Feb 8, 2026
7e97d3f
fmt
Daggerpov Feb 8, 2026
1f0e231
perf: profileview: only call relevant api calls when editing
Daggerpov Feb 10, 2026
54d5e67
Merge branch 'main' into bug-fixes
Daggerpov Feb 10, 2026
55c1f6f
error handling
Daggerpov Feb 28, 2026
d0e2adb
map centering on user location
Daggerpov Feb 28, 2026
3c4ed54
feat (toasts): for errors and successes
Daggerpov Feb 28, 2026
b0870f0
Fix map view zoom issue
Daggerpov Feb 28, 2026
09c55c1
dark mode friends page text styling
Daggerpov Feb 28, 2026
a032c48
add to activity type view styling fixed
Daggerpov Feb 28, 2026
d2eef92
proper add to see spawns in unadded friend page
Daggerpov Feb 28, 2026
32ea1ca
rm tests
Daggerpov Feb 28, 2026
45afabc
add to activity type view: proper list formatting + proper pinned sor…
Daggerpov Feb 28, 2026
a87e2ca
More error alerts
Daggerpov Feb 28, 2026
c4912e5
profile image styling
Daggerpov Feb 28, 2026
838c43f
clean activity type card styling
Daggerpov Feb 28, 2026
e14516d
fix back button navigation from activity type editing view
Daggerpov Feb 28, 2026
b0b8980
day activities padding fix
Daggerpov Feb 28, 2026
f15e27a
friend profile styling fixes
Daggerpov Feb 28, 2026
75449a9
Create FriendActivitiesCalendarView.swift
Daggerpov Feb 28, 2026
432eedd
perf: fix only one profileviewmodel per user
Daggerpov Feb 28, 2026
c4dae51
Proper user activities pages order
Daggerpov Feb 28, 2026
b9af839
activity type card styling fixed for dark mode
Daggerpov Feb 28, 2026
e51295b
calendar view navigation fixed
Daggerpov Feb 28, 2026
d075a28
screen edge padding to ensure reasonable padding for smaller iphones
Daggerpov Feb 28, 2026
c9ba11d
friend activities loading fixed
Daggerpov Feb 28, 2026
74284cb
friend calendar pop out working
Daggerpov Feb 28, 2026
e9c33f0
friend activities standardized components
Daggerpov Feb 28, 2026
1ad188f
alerts -> in-app notifications, for consistency
Daggerpov Feb 28, 2026
82635a6
Fix activities popping up for friends & back page navigation states
Daggerpov Feb 28, 2026
b2cc9c8
fix profile editing states
Daggerpov Feb 28, 2026
c42aaee
redesign profile update & delete apis
Daggerpov Feb 28, 2026
10776b4
fix (tutorial): overlay styling
Daggerpov Feb 28, 2026
d9be8a5
fix (profile): proper phone number digit error handling
Daggerpov Feb 28, 2026
680fd9a
fix (errors): error handling for validation (profile fields)
Daggerpov Feb 28, 2026
fcd9115
fix (profile): editing causing user sign out
Daggerpov Feb 28, 2026
a023db6
v2.0
Daggerpov Feb 28, 2026
bd520b8
Merge branch 'main' into bug-fixes
Daggerpov Mar 6, 2026
c794460
fix: misc. warnings
Daggerpov Mar 6, 2026
fd1332b
Terms and Conditions
Daggerpov Mar 11, 2026
1c3044d
dismiss verification code keypad
Daggerpov Mar 11, 2026
003c1ec
Privacy policy + terms updates
Daggerpov Mar 11, 2026
073c9e7
fix: activity click from calendar
Daggerpov Mar 11, 2026
41ffdf6
fix: nav title for add friends to activity type truncation
Daggerpov Mar 11, 2026
e4398b8
fix: auth provider buttons no longer have drop shadow
Daggerpov Mar 11, 2026
8fb0544
fix: verification code entry
Daggerpov Mar 21, 2026
856954b
fix: tutorial flow ending properly
Daggerpov Apr 11, 2026
a131a84
fix: social media icon image resolution improved
Daggerpov Apr 11, 2026
f466977
fix: misc. spacing
Daggerpov Apr 11, 2026
11564f9
chore: simplify logs
Daggerpov Apr 11, 2026
5c4bba1
fix: google sign in url scheme
Daggerpov Apr 11, 2026
327fba9
fix: padding
Daggerpov Apr 11, 2026
8fed213
refactor: consolidate reused components
Daggerpov Apr 11, 2026
46d341d
fix: various onboarding glitches
Daggerpov Apr 11, 2026
e5fd3dc
fix: popup and button styling
Daggerpov Apr 11, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
{
"images" : [
{
"filename" : "instagram-1x.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "instagram-2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "instagram-3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
"author" : "xcode",
"version" : 1
}
}
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Original file line number Diff line number Diff line change
@@ -1,8 +1,19 @@
{
"images" : [
{
"filename" : "whatsapp_logo.png",
"idiom" : "universal"
"filename" : "whatsapp-1x.png",
"idiom" : "universal",
"scale" : "1x"
},
{
"filename" : "whatsapp-2x.png",
"idiom" : "universal",
"scale" : "2x"
},
{
"filename" : "whatsapp-3x.png",
"idiom" : "universal",
"scale" : "3x"
}
],
"info" : {
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
57 changes: 57 additions & 0 deletions Spawn-App-iOS-SwiftUI/Extensions/View+KeyboardOverlap.swift
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
import Combine
import SwiftUI
import UIKit

/// Tracks how much of the screen bottom is covered by the keyboard (screen coordinates).
/// Use when ancestors apply `.ignoresSafeArea(.keyboard)` so system avoidance does not run.
final class KeyboardOverlapHeight: ObservableObject {
@Published var value: CGFloat = 0

private var observers: [NSObjectProtocol] = []

init() {
let center = NotificationCenter.default
observers.append(
center.addObserver(forName: UIResponder.keyboardWillChangeFrameNotification, object: nil, queue: .main) {
[weak self] notification in
self?.update(from: notification)
}
)
observers.append(
center.addObserver(forName: UIResponder.keyboardWillHideNotification, object: nil, queue: .main) {
[weak self] notification in
self?.update(from: notification)
}
)
}

deinit {
observers.forEach { NotificationCenter.default.removeObserver($0) }
}

private func update(from notification: Notification) {
guard
let frame = notification.userInfo?[UIResponder.keyboardFrameEndUserInfoKey] as? CGRect
else {
return
}

let screenHeight = UIScreen.main.bounds.height
let overlap = max(0, screenHeight - frame.minY)

let duration =
(notification.userInfo?[UIResponder.keyboardAnimationDurationUserInfoKey] as? NSNumber)?.doubleValue
?? 0.25

withAnimation(.easeOut(duration: duration)) {
value = overlap
}
}
}

extension View {
/// Bottom padding matching on-screen keyboard overlap (for views under `.ignoresSafeArea(.keyboard)`).
func keyboardOverlapPadding(_ keyboard: KeyboardOverlapHeight) -> some View {
padding(.bottom, keyboard.value)
}
}
Loading