SA
Skip to main content

Project Ganymede

2024-06-12

2024-04-14

  • Added text placeholders. It was surprisingly hard to do it in UITextView and I'm surprised there's no easy way of doing this.
  • Tried to modify ProgressBar but failed
  • Completed Read View.

Funny that the only way of recording is like this, because my screenshot protection is too good!!!

Funny that the only way of recording is like this, because my screenshot protection is too good!!!

25F68A.jpeg

2024-03-19

Wrote a simple read view. Added timer for sending action. The send screen is done; all we need to do is the read screen.

Also, AI-gile could be another programming pattern. Gen Z does not know file directories. The gist is that we don't need to "organize" files as semantic search improves because whatever we search will pop up automatically. Just have a giant file-pile and semantic search when you need something. These searches have now become so smart that they search for synonyms and deeply nested contexts and text inside images.

2024-03-15

  • Added LogTail to Europa
  • Implemented Encryption and Attaching

2024-03-07

E13EA3.gif

Rewriting Callisto with UIKit. Primarily because of the extensive jumble mess with SwiftUI.

2024-02-10

Restored server with FlightControl

2024-01-04

Server Crashed. migrating to Fly.io... Because I wanted a Vercel-like experience for backends. However migrating is a pain... because originally I wrote everything as CF workers functions. Such a stress, app is getting delayed and delayed

2023-12-24

8CE3E2.png

2AEC71.png

2023-12-15

EEDDA7.gif

2023-11-22

  • There was a property in MSMessage of shouldExpire. The problem is that the recipient can override to keep the message, which we don't want.
  • Implemented Message Reading Functionality
  • I implemented proper loading view features, with fade-in and fade-out.

D7D1B8.gif

  • Refactored a lot of files
Callisto
├── Assets.xcassets
│ ├── Contents.json
│ └── iMessage App Icon.stickersiconset
│ └── Contents.json
├── Base.lproj
│ └── MainInterface.storyboard
├── Callisto.entitlements
├── CallistoLoadingView.swift
├── CallistoMessageReadingView.swift
├── CallistoMessageWritingView.swift
├── CallistoService.swift
├── CallistoView.swift
├── Info.plist
└── MessagesViewController.swift

2023-11-18

  • Linked the client side to
    • request server
    • pack it as MSMessage
    • send the message
    • dismiss the keyboard & request a compact presentation style
  • Pink Bubble?

61B318.jpg

2023-11-13

FCAC15.png

When Test Fails

  • Refuses to Deploy

656236.png

When Test Passes

  • Deploys

C53193.png

2023-11-11

Used Prisma, Prisma Accelerate, PlanetScale, and Cloudflare Workers to create a simple server for the Ganymede Table Structure. Prisma layer makes three requests to the DB per 1 request to the server, albeit it probably would hit the Prisma Accelerate Layer, we can later optimize it with this document.

Composing Messages with 3 People Group Chat (Writer, Reader 1, Reader 2)

7A1B12.png

When the Writer Tries to Read (Invalid)

E2FC5B.png

When the Reader Tries to Read (Valid)

111134.png

When the Reader Re-requests to Read (Invalid)

40A9E9.png

When Another Reader Requests to Read (Valid)

14FF06.png

When an Unauthorized User Requests to Read (Invalid)

A9C91C.png

Also

2023-11-10

2229DC.gif

2023-11-08

  • It is possible to limit iMessage forwarding for iMessage Extensions
  • It is possible to mark the iMessage with LocalParticipantIdentifier
  • LocalParticipantIdentifier is different on all devices
  • The most straightforward way would be marking:
    • Set LocalParticipantIdentifier to true on reading (on the server)
    • Reject if LocalParticipantIdentifier is already true.
  • Problem: If the user deletes and reinstalls the app, LocalParticipantIdentifier changes. So the user can read unlimited times if the uninstall & reinstall
  • Mitigation: Assign UUID for each message. Each message will have LocalParticipantIdentifier + RemoteParticipantIdentifiers count as the maxRead. This will at least 'limit' the max read count.
  • Problem: on a Group Chat setting, a user can read unlimited times instead of another participant.
  • Solution: Sign in with Apple?!

2023-10-20

I can attach many images

8A52BA.png

2023-10-19

E19673.png

A09B56.png

2023-10-16

885554.png

2023-10-13

In iOS 17, Shortcuts can send messages without confirmation. Can we use this for Send Separately or Ganymede?

2023-10-12

  • Read notifications
  • Screenshot notifications
  • Broadcast
  • App Clip + Apple Login?
  • Therefore, we name it Project Ganymede. You can NEVER win Apple. It is the most massive system, just like Jupiter. Therefore, we choose to become a moon. The moon of Jupiter. And a moon can be bigger than planets. Ganymede is bigger than Mercury.

2023-10-09

I finished some working prototypes. Some concerns: It seems like the transcript MSMessage is an immutable object. We might consider server approaches, such as KV storage.

B89B94.gif

I don't want to store any encrypted or decrypted messages on the server. So we can consider something as:

  • When sending a message
  • When reading the message
    • extract UUID and encrypted message
    • read KV with UUID and delete the DecryptKey if any necessary condition is met
    • once it expires, the user cannot read the message again

Considerations

  • How do you store different strategies (After 5 seconds? 10 seconds? 15 seconds?)
  • Group chats
  • Photo / Video Payload
  • Screenshot detections and notifications

Prehistoric