AI prompts
base on App that shows how full the International Space Station's urine tank is in real time, available for macOS (menu bar), iOS, watchOS and visionOS # pISSStream
pISSStream is a menu bar app that shows the International Space Station's urine tank's capacity in real-time. It is available for macOS, watchOS, iOS, and visionOS.
## Official Icon
<img src="pISSStream/Assets.xcassets/AppIcon.appiconset/icon_512x512.png" alt="Launch Image" width="200" style="border-radius: 12px;" />
## Features
- Real-time ISS urine tank level monitoring
- macOS menu bar integration
- iOS and watchOS app with live updates
- visionOS immersive 3D visualization
- **Spatial audio with deep-space soundscape in immersive view**
- Enhanced UI and custom app icon for Vision Pro
- Uses NASA's official public ISS telemetry stream via [Lightstreamer](https://lightstreamer.com/)
## Installation
### macOS

[Download](https://github.com/Jaennaet/pISSStream/releases/download/v0.2/pISSStream.0.2.dmg) the latest release DMG.
### iOS, watchOS & visionOS
Due to Apple's security model, you'll need to build from source and sign with your own developer account:
1. Prerequisites:
- Xcode 15.2 or later
- Apple Developer account
- iOS 17.0+ device for iOS app
- Apple Vision Pro or visionOS simulator for spatial computing
2. Build steps:
```sh
# Clone the repository
git clone https://github.com/Jaennaet/pISSStream.git
cd pISSStream
# Open in Xcode
open pISSStream.xcodeproj
```
3. In Xcode:
- Select your development team in the Signing & Capabilities tab
- Choose your target device (iPhone/macOS or Vision Pro)
- Build and run (βR)
Note: If you don't have an Apple Developer account, you can still run the app in the simulator or on your device for up to 7 days using a free provisioning profile.
For **visionOS** development, you'll need the visionOS SDK installed in Xcode. The app uses the ImmersiveSpace API for the 3D visualization experience and features spatial audio for enhanced immersion.
## Requirements
- Mac with Apple silicon
- Xcode 15.2+
- Apple Developer Account
- Vision Pro with developer mode enabled
- Mac and Vision Pro on same Wi-Fi network
#### Wireless Development
1. On Vision Pro:
- Settings > General > Developer > Enable Developer Mode
- Settings > Privacy & Security > Allow Remote Development
2. Connect Vision Pro:
- Open Xcode
- Window > Devices and Simulators
- Click '+' to add Vision Pro
- Follow pairing instructions
3. Build & Deploy:
- Select Vision Pro as build target
- Product > Run (βR)
#### Common Issues
- "Device not found": Check Wi-Fi connection
- "Unauthorized device": Re-pair Vision Pro
- "Build failed": Update provisioning profile
- Error "No paired Vision Pro found": Ensure Vision Pro is connected and paired
- "Invalid signing": Verify developer account and provisioning profile
## Usage
#### macOS
When pISSStream can connect to Lightstreamer and the ISS telemetry signal is being received by the ground station, the menu bar item shows π§π½βππ½ alongside the fill percentage, and the app icon reflects the latest UI enhancements.

If either the connection to Lightstreamer or the ISS telemetry signal itself is lost, the menu bar item shows π§π½βπβand the last received value if any, and the menu reads either "Connecting" or "No Signal".

#### iOS
Launch the app to view the current tank level in a simple interface.

#### visionOS
Experience the ISS waste tank in immersive 3D with real-time fill-level visualization.
https://github.com/user-attachments/assets/b24c6752-0fb8-4a2e-bf3c-6dab13f2c5e2
#### watchOS
Track the ISS waste tank fill level in real time β right from your wrist.
https://github.com/user-attachments/assets/f342fc59-0f2e-47db-88f9-d11746a863a2
## But why?
For some inexplicable reason people keep asking me why I ([@Jaennaet](https://github.com/Jaennaet)) did this.
My motivation was entirely that I thought this was both a hilariously stupid use of a space station's telemetry stream, but also kind of amazing at the same time. It's remarkable that we live in a world where it takes an afternoon to bang out a joke application that reads actual realtime telemetry data from a space station's toilets.
Also a great excuse to learn Swift, but the sheer ridiculousness was what drove me.
## Known Issues
Not the epitome of good coding practices since this was my first Swift & Apple platforms app ever, may break in exciting ways at the slightest excuse.
At the very least:
- shrugs at stale data
- Not overly bothered with error handling
## Contributing
Pull requests are welcome for bug fixes.
## Errata
[@Jaennaet](https://github.com/Jaennaet) found out about the data stream from https://iss-mimic.github.io/Mimic/, which has considerably more and more interesting stats than just how full the piss tank is.
We will not be adding any of them.
## Contributors
- [@Jaennaet](https://github.com/Jaennaet): initial idea and first version
- [@durul](https://github.com/durul): code quality, LOS handling, iOS, watchOS & visionOS versions
", Assign "at most 3 tags" to the expected json: {"id":"13820","tags":[]} "only from the tags list I provide: [{"id":77,"name":"3d"},{"id":89,"name":"agent"},{"id":17,"name":"ai"},{"id":54,"name":"algorithm"},{"id":24,"name":"api"},{"id":44,"name":"authentication"},{"id":3,"name":"aws"},{"id":27,"name":"backend"},{"id":60,"name":"benchmark"},{"id":72,"name":"best-practices"},{"id":39,"name":"bitcoin"},{"id":37,"name":"blockchain"},{"id":1,"name":"blog"},{"id":45,"name":"bundler"},{"id":58,"name":"cache"},{"id":21,"name":"chat"},{"id":49,"name":"cicd"},{"id":4,"name":"cli"},{"id":64,"name":"cloud-native"},{"id":48,"name":"cms"},{"id":61,"name":"compiler"},{"id":68,"name":"containerization"},{"id":92,"name":"crm"},{"id":34,"name":"data"},{"id":47,"name":"database"},{"id":8,"name":"declarative-gui "},{"id":9,"name":"deploy-tool"},{"id":53,"name":"desktop-app"},{"id":6,"name":"dev-exp-lib"},{"id":59,"name":"dev-tool"},{"id":13,"name":"ecommerce"},{"id":26,"name":"editor"},{"id":66,"name":"emulator"},{"id":62,"name":"filesystem"},{"id":80,"name":"finance"},{"id":15,"name":"firmware"},{"id":73,"name":"for-fun"},{"id":2,"name":"framework"},{"id":11,"name":"frontend"},{"id":22,"name":"game"},{"id":81,"name":"game-engine "},{"id":23,"name":"graphql"},{"id":84,"name":"gui"},{"id":91,"name":"http"},{"id":5,"name":"http-client"},{"id":51,"name":"iac"},{"id":30,"name":"ide"},{"id":78,"name":"iot"},{"id":40,"name":"json"},{"id":83,"name":"julian"},{"id":38,"name":"k8s"},{"id":31,"name":"language"},{"id":10,"name":"learning-resource"},{"id":33,"name":"lib"},{"id":41,"name":"linter"},{"id":28,"name":"lms"},{"id":16,"name":"logging"},{"id":76,"name":"low-code"},{"id":90,"name":"message-queue"},{"id":42,"name":"mobile-app"},{"id":18,"name":"monitoring"},{"id":36,"name":"networking"},{"id":7,"name":"node-version"},{"id":55,"name":"nosql"},{"id":57,"name":"observability"},{"id":46,"name":"orm"},{"id":52,"name":"os"},{"id":14,"name":"parser"},{"id":74,"name":"react"},{"id":82,"name":"real-time"},{"id":56,"name":"robot"},{"id":65,"name":"runtime"},{"id":32,"name":"sdk"},{"id":71,"name":"search"},{"id":63,"name":"secrets"},{"id":25,"name":"security"},{"id":85,"name":"server"},{"id":86,"name":"serverless"},{"id":70,"name":"storage"},{"id":75,"name":"system-design"},{"id":79,"name":"terminal"},{"id":29,"name":"testing"},{"id":12,"name":"ui"},{"id":50,"name":"ux"},{"id":88,"name":"video"},{"id":20,"name":"web-app"},{"id":35,"name":"web-server"},{"id":43,"name":"webassembly"},{"id":69,"name":"workflow"},{"id":87,"name":"yaml"}]" returns me the "expected json"