June 16, 2025
Some time went past since the first stable release of eScive, and many things have happened. Long story short, my Google Pixel 6a fell on the road while riding my e-scooter, and a truck literally DROVE OVER my phone. I guess I'm now an iPhone user!
1) eScive v1.1.0 now officially supports iOS 13 and upper, sideloadable using methods like TrollStore, AltStore Classic/SideStore, or Live Container.
2) Feature parity between Android and iOS, except for the live playing widget that allowed easy access for your music players.
3) You can double tap on the swipe to lock to instantly lock, wayyy faster but lessss fancy.
4) The collision (?don't know the word for it) of the LED switch is bigger, making it easier to tap on it.
5) The Deep Linking protocol section in the README has been updated, and you can now long tap the icon on your home screen to quickly access some of the possibilities you are able to do using it.
6) Some translations were fixed.
7) A source for iOS compatible with AltStore/SideStore and Feather is available at: https://dl.bassinecorp.fr/altstore.json !
Migrated the app to Flutter 3.35 and added some minors things: the request to weather API is now logged for easier in-app debugging, the debug bridge now set states as ready when done loading, and snackbars appears to indicate a successful action through deep linking.
This update also marks the final point in the beta phase of the development: Google Play denied the app two times so I'm just going to publish the APK on GitHub and on my website.
Maybe I weren't done with this app yet.. 👀
This new update features a trip sharing feature, weather alerts in France, and a far better landscape mode support.
Added a /debug hidden command that reply with the bot version and uptime. The version of all used programs (ffmpeg, ytdlp) are logged in the console at the start of the bot.
This update adds a caching system for downloaded files, this enable the possibility to download files faster when another user already requested it. Files expires 48h after their creation. A Dockerfile + docker-compose.yml was also added for easier installation, and the README.md has finally been wrote!
Added support for downloading YouTube videos and audios by sending links from Apple Music, Spotify, Tidal, Deezer, Amazon Music, Song.link.
This updates also fixes some minors issues and add asynchronous inline keyboard operations, which fix the unability to handle multiple downloads at the same time.
You can now download from YouTube with Apple Music links! This is due to two new features inside the code called subproviders and search platforms.
A subprovider is a service that will be supported when the user send a link a associated to them, a search platform is a service that can be used by the bot to make a search. For example, it give users the ability to send an Apple Music link that will be used to search and download the music through YouTube.
This update also give the ability to use ytdlp provider as a fallback when a link isn't recognized as it supports many services like SoundCloud, Instagram and TikTok! The global check also check if ffmpeg is installed to avoid issues when running the bot, and the Telegram Local API is now used to bypass 50 MB file size limit.
We can download videos directly from YouTube in MP4 and MP3! The bot simply need to be sent any URLs from youtube.com / youtu.be and the user will be asked to choose the extension. If YouTube doesn't give us the format wanted, it will automatically be converted to using ffmpeg. This update took some time because I've built everything with a modular architecture - I can now just create a new JS file in the providers folder and it will be automatically functional without changing must of the core bot logic. For your knowledge, yt-dlp is obviously used for this.
Added initial support for YouTube as a form of provider (which will help extend the capacity of this bot), still not visible through the commands because I've also just started the ability to select a provider based on the URL sent to the bot by the user. I also added a global check of the commands required by the bot to function properly, it will automatically be executed before connecting to the Telegram API, and will cancel the process if a fatal error is encountered.
Starting this new project, it only connect to Telegram and reply to some commands for now + implemented a failure handler (also logs in the terminal).
Download videos and audios from YouTube and others platforms supported by yt-dlp using your own selfhosted private downloader!
Fixed numerous bugs, implemented startup time measuring, implemented a way to choose what elements are shown on the UI (for future bridges), and implemented DEEP LINKING (with escive://
scheme) + KUSTOM INTEGRATIONS!
You can now make your own automations that can actually interact with your vehicle: this includes the ability to retrieve data from a Kustom App, and to define data from any apps!
Don't forget to sign up for the Google Play Store beta program to try the app right now with demo mode (if you don't have a compatible scooter)!
I published some fixes adressing the historic of positions showed in the fullscreen map (more frequent update, changing the maximum distance threshold when tracing a segment, new debug settings, speedometer froze when starting to emit positions).
Also, I really need more users to sign up for the Google Play Store beta program to get the app accepted on the store, this would mark the final step before submitting the project here!
eScive is now available to test directly from your browser! On Chrome Desktop, you can even connect to a compatible Bluetooth e-scooter to fully test the app. It can be accessed from this link.
Btw, you can now sign up for the Google Play Store beta program to get early access to eScive on Android!
The app will soon be available to try directly from your browser. Thanks to the amazing technologies provided by Flutter, I'm planning on making a demo website for everyone to try the app. The best part is, it can even connect to a real e-scooter! There's a lot of bugs that I may not get to fix now (not the current priority) but it's working I guess. Stay tuned for the demo link!
In the meantime, you can now sign up for the Google Play Store beta program to get early access to eScive on Android!
Update on the map widget! There is now a new settings to track every one of your moves when riding and to show them directly in the fullscreen map. This new feature make the data precision even more useful as your position was already used when this option was turned on (to show your street name in the home page or to locally determine your moving speed from your phone).
I'm approaching the finale state of this project and I will start to create a new project on the Google Play Store for Developers to make sure it will be published as soon as possible.
IN-APP NAVIGATION HAS ARRIVED!
A new widget has arrived in the app, get an overview of the environment you're riding in, and quickly launch a route in your favorite navigation app (Google Maps, Transit, Citymapper).
This new feature displays a map on eScive's home screen along with the street and city you're currently located in, to help you orient yourself in any circumstances.
Tap on it to display:
- A full-screen view with intelligent search functionality
- A history of your previous trips launched through eScive
- The ability to define up to 3 favorite addresses that will be displayed on the map when you approach them
I originally wanted to integrate a step-by-step navigation system within the app, but it's better from a user experience standpoint to simply redirect to a more competent third-party app like Google Maps, especially since the visual and audio notifications as well as PiP on these apps are sometimes preferable.
Advanced stats are here! They can be enabled directly from the settings and are calculated based on time and TRIP/Total Distance (provided by the e-scooter).
Sadly, eScive needs to be opened for these data to be grabbed and saved into the app local data, but the app is perfect for staying always on, so that won't be a problem!
After a few final touches, the eScive source code is now available on GitHub. The app currently allows you to:
- Connect to an electric scooter compatible with the iScooter app (i10, i10 Max, and i10 Pro models; the i10Max was used during development, but differences exist between the three versions so I'll need to make modifications later)
- View and interact with the scooter in real-time: show speed in km/h, speed profile, front light, built-in parking mode (lock)
- Add, rename, delete one or multiple devices, including a demo device (with random mocked data)
- In-app widget to display and manage currently playing music on the phone
- Warning lights in the speedometer, like in a car
- Settings to force the phone screen to stay on or force its brightness to maximum, set a visual speed limit, set the interface language
I'll soon be adding statistics through a trip tracking feature using the phone's GPS position, as well as a new in-app navigation widget (if possible, I still need to study the feasibility). Stay tuned!
I had already started the project before the start of SoM, I didn't intend to publish it so the entire codebase was in my native language at the beginning. After translating everything, removing some minor details that I didn't want to show online, and after cooking on the first BLE protocol integration, I'm almost ready to publish the source code of the project. Afterward, I will keep updating the app and posting devlogs here until I get to the most advanced state of the app I want to make!
eScive is a mobile app that aims to be a third-party client for e-scooters with Bluetooth functionality, allowing an alternative interface with more features, and more importantly, without all the telemetry that is included in some official apps (generally Chinese ones 👀). For now, the project specifically targets iScooter "i10" electric scooters, but is coded in a way that will allow other brands in the future. Communications between devices are based on reverse engineering of packets sent using the BLE protocols, and directly from the decompiled source code of official apps. The app is made using Flutter and is available to download on GitHub, it can also be tested directly from the browser.
This was widely regarded as a great move by everyone.