#Bobby, a new voice assistant and Snowy successor
1 messages · Page 3 of 1
It does look a bit busy
it's cute, I like it
Works for me. I do sort of miss the friendly round font.
Which is, granted, not a particularly accurate representation of any text the app ever shows.
that's fair
can we pick a cooler screenshot? like of a command with pretty boxes that pop up on screen?
that's my only critique
It does sort of amuse me that after a week of redesigning everything the screenshot is of something that is entirely untouched.
Except for being bold now
indeed
The current text explains the book being read
If it was e.g. a timer being set then the picture doesn't make sense any more
We just need to make one of those fancy GIFs of bobby doing lots of things as the first screenshot
I wish banners could be gifs
Presumably our control of the app store means they could be if we cheated
You can add multiple banners and it'll cycle through them
oh
It's like a gif, just 3spf
(But GIFs are terrible and that would probably be too big)
Banner of bobby reading a book
I think my brain went "You don't mean spf, that's suncream"
Banner of bobby in the kitchen setting a timer
Banner of bobby with an umbrella checking the weather
Don't ask how bobby holds the umbrella
I am also very curious what the actual question being answered in that screenshot is
Not that it matters
can you recommend me a beginner c programming book
it keeps recommending that book no matter the level of expertise
c78 is the only c that matters
Please, haha
Love the extra text at the top of this one ❤️
is there/was there a limit?
3 per platform
those are per platform too?
They can be yep
Gotta show the right watch
I need to get graphics for all the platforms now
In case you don't have it: https://developer.rebble.io/developer.pebble.com/guides/appstore-publishing/appstore-assets/index.html
A collection of downloads to help developers create and improve their appstore
listings.
I have seen it mentioned
Fortunately bobby only actually supports two platforms
it could support 3 if circles are ever possible
the lack of microphone is a difficulty for the remainder
oh actually, emery is a possibility too
there's so much screen area on emery
It's a nice looking screen
T3 text input
t9 wasn't actually 9 keys
I know
Though I don't know where the 9 did come from
The successor to T8?
Apparently it stands for "9 keys"
I guess if you discount the punctuation it was true
I am now curious which key specifically was the ninth
So I guess this thing I knew was false
would be fun but idk if it's worth it for the, what, 3 in existence? lol
my first watchface or two had emery support and then I decided i don't care
Out of curiosity - what did you use to make the drawing/animations for bobby?
The times up animation is sooo cute!
I think it's all inkscape
Bobby wants dinner and is just going to stare at the hourglass until it's ready.
these are really cute
I forgot to add a pot on that hob
I would add unwashed dishes too, but there's not enough space
bobby can pretend to have taken care of that
This app is amaizing! Thank you!
When Bobby is lauched with a button press & hold, it immediately goes into listening mode. This is awesome. However, is there a way to cancel the listening and move into the "watchface mode" with the menu?
Great, thanks! Perhaps a double-tap with the center button could act as a "become a watchface now" button?
What's your use case?
This way I could e.g. set a reminder with quick launch and check the remaining time with a quick launch. Plus the menu gets a bit cluttered with so many great apps you wonderful people are making lately.
Hm
(you can also verbally ask it for the time remaining but I grant that's perhaps not so convenient)
Thanks!
This does also remind me that I was considering changing the timer set confirmations to instead be cards that actually count down the time.
the idea is that bobby is prepared for when it actually rains according to the screenshot that's not there yet
Makes sense
this'd be super cool
Everyday the ponny seems to get stronger. I worry about when Bobby hits over 9000 power
One thing I always wanted to get onto pebble, and with an OSS PebbleOS I migth someday is the totally inane idea of morse text entry
I wonder if I should subtitle it with Rebble assistant rather than Pebble assistant
do one of those R with differently coloured right leg
I think that would be good
Getting some kinda Rebble branding into the banner is good
since this is A Rebble Thing
interesting choice
yeah, but that's also only on the app store page- once you have it in your locker the author reads as Katharine Berry
You also can't see the banner there!
I should probably change the author there if it's being a Rebble Thing.
This isn't an objection, just an observation
But if it's changed to Rebble I probably wouldn't do anything with the stroke on the R
I think a prefer Pebble because a Rebble isn't a thing
But I also don't have any strong feelings on it.
any particular requests for the banner screenshots?
Well I guess you'll have to get the weather to be raining somehow
I will just ask for the weather in england
I enjoy the thematic reminder on the timer one but I wonder whether it should actually just be a timer instead.
yeah, probably
I said "remind me", but realistically for short periods of time it should be a timer rather than reminder
because a reminder wouldn't work anyway for that short of a period
Indeed
I assume if you scrolled down on that screen it pointed that out
It seems to do that reliably
It claimed to set a reminder but actually set a timer. Thus, lie detector.
I wonder whether the extra context it looks like you provided inspired it to say "remind"
yeah, that's likely
Maybe I should accept timers as reminders
(the actual way the lie detector works is it classifies the message as zero or more of a timer, an alarm, or a reminder, and then I throw in a complaint if the classification doesn't match the function calls)
oh, there's two different progress bar patterns https://developer.rebble.io/developer.pebble.com/guides/design-and-interaction/implementation/index.html
Resources and code samples to implement common design and UI patterns.
Really, if it sets anything it probably doesn't need the lie detector
The verifier is just there as a nudge that something might be wrong if no box appears
If a box does appear, the user can read it themselves
I really wish that Bobby could cancel a reminder it set - it keeps on misunderstanding the time I say for a reminder and then I have to wait until the wrong reminders sync on the timeline and manually delete them
For some reason, the voice recognition kept picking up "fourteen ten" as "04:10", and asking bobby to "set another reminder for fourteen ten" caused it to put a 04:10 reminder on the next day instead...
...and now it's picking it up perfectly every time
damn you inconsistent voice recognition!
@karmic lion - I just wanted to chime in to say that reminders have been working great on the latest build. Thanks for your help!
Bobby and I both enjoy our sushi after it's been lightly sauteed
The banners are amazing LCP 😄
I have invoked @azure goblet's forbidden magic.
this right here is what the open sourcing of PebbleOS was meant to unleash
also, dynamically sized speech bubble
very productive things to do with my time.
the problem with dynamic speech bubble is that it leaves the rest of the space looking bizarre.
Ahhh, I love it!
I think I might keep the top of the bubble where it was - better imo to have the extra space next to bobby, rather than the emptiness just under the time
if that makes sense
that makes for a very long tail
he is a horse, after all
/joke
i think i would keep the tail anchored a bit higher, like just above their nose?
feel like in a lot of cartoons the tail doesn't necessarily stretch all the way to the speaker's mouth, since (to your point) that can be awkward looking and/or get in the way, so I'd honestly opt for a tail that feels like a good length to you and just make sure it's pointing in the right direction 🙂
rough photoshop example - don't mind the pixels
i guess i'd probably shift it (the tail) slightly to the right so it's not directly over the snoot - and that way if the text did break to a third line the tail could just shift directly down (if that's how it's coded, and perhaps it isn't) (i shifted it to the left in my mockup, to be clear)
I have decided I have spent far too much time on this.
i get that a lot, haha
wrapping crimes: https://github.com/pebble-dev/bobby-assistant/commit/a6ef4c96198a6c5e274b229bf75c0977a1046970
that is incredible
I am glad this is open-source. Future changes to Pebble OS may break this and this way, the firmware engineers have a way to see how and why. You wouldn't believe how many hacks I pulled for my productions in the past for which I had to pay the price when writing Gossan. Without source code it's multiple times harder to work around those… And also: People can learn from it!
would it be possible to remove the dot indicating that you can click the middle button to speak while the button can't be pressed?
ie while it's loading a response
Yes, that sounds quite reasonable
Does it actually enforce not pressing it? I don't recall.
oh I can't press it because I took a screenshot so now bobby won't work until indeterminate time in the future
it will just endlessly try to load up a response
what
I see three pulsing dots and that's about all that happens
well, and my question
and the dot on the side
Bizarre
the middle button does nothing in this state
If screenshots break it I might assume that the cobble pebble protocol implementation also needs work
I am curious how that happens really
It might be interesting to see app logs from that state though
yeah, I might have a look later
Anyway if I'm somehow disabling the button I can probably hide the dot when I do
dictation works without a hitch in this state too, making it all the more fascinating
The one weird thing I recall screenshots do on the watch is lock the framebuffer while the screenshot is sent, but that doesn't seem likely to be related.
progress, now I'm getting an error and not endless dots
I think I am going to put in that cobble warning after all
I don't know how many people have that much reason to take a screenshot
Nonetheless
Does cobble implement Pebble.showSimpleNotificationOnPebble or will I have to actually put effort in?
bad news
Bah
Oh well, I needed to put something in to warn about not having a subscription
It can share a mechanism
at this point, idk why this doesn't work
I restarted the watch, the phone, redid the setup of the app
It's possible cobble is unrelated and bobby is just broken
the last thing to do is to look at logs
oh, wait
I was just trying with too long queries apparently?
it works just fine with short queries
I did do longer queries yesterday and haven't really updated the app
since cobble doesn't do updates
How long is long?
more than 5 or 6 words apparently
Hm.
though I asked "What's the weather" and it just didn't answer either
That's not very long.
it did answer to "Brussels" with a weather widget tho
That is plausibly an actual bug, imig it generates a widget start but not a widget end you just get an empty response.
I've not seen this happen since I fixed a typo that was causing it but it's a thing that could happen
hmm
oh, worth noting: cobble can't get location yet I'm fairly sure
(or maybe I was gaslit by ai)
That shouldn't cause a problem though I don't know if I handle failing to retrieve a location properly
I handle specifically disabling it
I do recall crc saying location didn't work for mysterious reasons
it seems like a weather specific issue tbh
I should probably actually handle the case of unknown location for weather widgets, currently I tell the model it can do them for the user's current location unconditionally
ok, so: asking for weather in london is broken, but asking for weather in Brussels isn't
That makes very little sense
what
I know
ok, no, it just can't do brussels either sometimes
I don't think I got london once though, I'm so confused
well, something is wrong with the weather and idk what
yeah it's not worth it
There's plausibly something there with the lack of working location support
Which I should handle
But also this further motivates me to put in that cobble warning
If I'm lucky it'll even show up
Bobby has an umbrella, but it's sunny and there's a second umbrella in the umbrella holder
Bobby's first umbrella is clearly built in like some inspector gadget device
well, it's clearly going to be raining according to the card
also the second umbrella really fits the tagline at the top
Isn't the idea that some of the preparedness rubs off? What does it bring for Bobby to be prepared?
So: The umbrella, I guess, is for the user – tagline doesn't make that clear?
that's true
hm, that doesn't contain any p2 assets
the blue one is difficult to replicate, therefore I'm not gonna bother for now
I lied
I think I gimped enough for today
now this is what I call cursed!
I do like the pt shaped reflection
ah yes, the secret colour never-released Pebble 2
I could use somebody with a P2 to take some screenshots to be able to create those banners
my p2 is not with me right now and won't be anytime soon
For some reason it won't load on my Pebble 2, but it still looks fantastic! Kudos!
can you take a screenshot from the pebble android app itself?
I don't know actually
I think you gotta use the cli
cobble doesn't work with p2 right now otherwise I totally would
Judging by that screenshot I am guessing cobble also does not apply the colour correction the pebble tool does
nope
One quick feature request, it would be great to have a “fit to screen” mode for answer length.
Basically telling the model to keep its answers under a certain character length.
It has escaped to Reddit: https://www.reddit.com/r/pebble/comments/1j8ytiw/bobby_pebbles_new_voice_assitant_by_rebble/
bobby has breached containment, I repeat, bobby has breached containment
horse on the run
urghhh i deleted my reddit for a reason, i deleted my reddit for a reason,
Super cool seeing all the energy behind it though! people love bobby!
making it just A Rebble Thing that works with your subscription was a brilliant choice
It's almost like when I had a job I didn't hate! 
Not that I’ve ever reached even 1% of Bobby’s quota, will there be a tiered rebble price range for higher quotas?
I hope we don't end up needing to worry about that
Extensive use of Bobby is by far the most expensive per-user service Rebble has ever offered, which is why we put explicit quotas on it.
But I want to try to design to avoid needing to sell more expensive subscriptions, rather than sell more expensive subscriptions.
If I calculated correctly, the quota is $2 correct?
yes
users who actually exhaust their quota and also have a monthly subscription (a substantial chunk of which goes to processing fees) may still be losing us money.
but so are all the users who don't pay anything, so
as long as it all balances out
I just subscribed so I could use bobby haha
I think the most usage of Bobby will happen when people are trying it out for the first time
Then it's probably just going to be reminders and stuff
It'll be fine
It's a loss leader for sure
unfortunately, Bobby development will now abruptly pause due to my lack of anywhere to sit while I do it
what all do we need diorite screenshots of? i am wearing a diorite now
let's see how hard it is to install pebble sdk in currentyear
I am very tempted to write a Go program that just takes screenshots
so I can statically compile it and run it without it being a Gigantic Pain
oh, someone on reddit asked about music control.
and specifically spotify
I think we can actually do Spotify because of their wild setup
(where, for some reason, an API can control any of your music players)
might be a fun diversion
there was an old app called Pebblify that was a fully featured spotify api remote
I was planning on building that into my fork tomorrow (and upstreaming it if it was good enough)
sounds like we need a tiny music icon
The only thing I haven't quite thought of yet is auth
in the meantime, pondering keeping track of a user's reminders so that bobby can look at and delete them
The biggest problem with this is that, if they are deleted from the timeline by the user, I can't tell
ooh, screenshots
I think the weather has to be raining for the image to make sense
(or rather, the question has to be "how will the weather be today?" or similar and the answer has to be "rainy")
i told it the tongue twister
wikipedia(article_name="Woodshuck", wiki="Wikipedia") is something it can do. But just spitting it at the user isn't going to achieve anything.
pdhfhfhah it says "yup, that's a tongue twister, wikipedia does not have info on how much wood they would chuck but it does say theyre important for soil health"
in any case I am currently tired of bobby so I'm going to go play a video game or something
somewhere with a chair that works
couch
in retrospect it was a strategic error to have only one desk chair
what were you using to stitch screenshots together?
i asked it "check the weather somewhere that it's raining rn" and the LLM checked
- my city
- london
and - seattle
in that order, until it found that seattle had had a bit of rain in the past hour. it did not actually show a weather info card for any of them
you could probably have followed up with "show the widget" and it would've done so
It doesn't unconditionally show it, it only shows it if the model is so inclined
I do like that though
"london is famously rainy. nope"
"seattle is also famously rainy. aha!"
i think it's funny that those are the cities i asked about as well
This morning I asked it for Friday's weather in another location and it followed through with a great forecast icons and all
technically it can actually also put the widget in the middle of a response, or at the end, but I have told it to not do that please.
it's sheepish about the fact that it can't make up a widget with rain on it
good pony
it's true, it can't actually control the widgets
it can only say "show the user a widget with the weather in a location"
<!WEATHER-CURRENT location=[here|place name]! units=[metric|imperial|uk hybrid]!>: embeds a weather widget showing the weather right now in the given location
<!WEATHER-SINGLE-DAY location=[here|place name] units=[metric|imperial|uk hybrid] day=[the name of a weekday, like Tuesday]!>: embeds a weather widget summarising the weather in the given location for a single day within the coming week
<!WEATHER-MULTI-DAY location=[here|place name] units=[metric|imperial|uk hybrid]!>: embeds a weather widget summarising the weather in the given location for the next three days
success!
wait there's an exclamation mark after the location
it asked if i wanted the next three days of weather, i said "sure, and if one of them is rain, show the widget for that day"
that explains why it keeps putting exclamation marks there
im continually surprised by how actually really good bobby is
amazing
and fast!
Code magic
Yeah really fast
like i'd accepted that gemini on my phone struggles with all the same tasks that google assistant on my phone struggles with (vis a vis picking the right track on youtube music, or the right location on a map) and cannot be trusted to tell me correct facts
but bobby is just really good actually
and only slightly burning down forests to achieve these things! 
maybe because i don't ask it to do those specific things
That probably helps
Does Bobby have instructions not to use the general knowledge base in Gemini?
Like its scope is limited to the Wikipedia entries?
It doesn't, and in fact has instructions to use its general knowledge when wikipedia fails it.
It completely disregards these instructions.
Ah haha
That explains the abrupt ending to some of my conversations lol
"sorry I don't have any information about that"
I have an idea for a wording that might work better by bypassing wikipedia in the first place
I should give that a shot sometime
Need a chair first though!
also, separately, by giving it better wikipedia search
a chair would be good!
sadly it will take a month
I will have to find an interim solution
it might be using my Vision Pro on the sofa.
Not a bad solution at all
i would actually use my quest 3 for multiple monitors all the time if meta remote desktop worked on linux
@wooden wedge diorite screenshots - tried to recreate a few that you had banners for
I do not think the Quest 3's resolution is remotely good enough for that use case, to be honest
The Vision Pro is barely passable
Barely.
it was pretty good when I still used windows imho
on the upside rebbletool was really easy to install
havent tried doing sdk things but it takes a mean screenshot
i love rebble tool
use it for all my pebble development now!
since the spotify api calls require a specific users authorization, I am thinking of this flow
add login to spotify button to bobby config
bobby service gets auth token through redirect_uri
bobby service requests access token
service stores access token response and links it to the users timeline token
then on api requests:
service checks if the access token is still valid
if not: refresh
use token for api request
any thoughts? I dont know if I am thinking this through correctly
if a pkjs-next happens, cobble should really give some consideration to making it easier/better to log in to services through the config webview
a lot of services really don't like that - see google login being broken on kde desktop for a couple big names
tiny music
The service doesn't use timeline tokens as a key, it uses user IDs (to the extent it used anything)
gotcha!
I think I'd rather store the tokens on the user's phone if possible.
oh yeah, we can just query the api through pkjs
It is also possible the Spotify will not permit authentication through a pebble webview
(Google doesn't, for instance)
The bobby service doesn't really have long-term storage at the moment and so I am reluctant to add it.
Quota usage is stored in redis and this works but I don't love it for indefinite storage
can confirm through the pebblify app that spotify can indeed be logged in from through a pebble webview
great, I need to either find a implementation for sha256 or write one
It does! Back when I was trying to make a Spotify app I got the PKCE flow to successfully work. However I didn't implement refreshing tokens from Pkjs but that isn't the hard part
Whether or not it's secure is debatable
would you happen to have that code somewhere still? 🙏
mostly wondering how you did sha256
Technically Authorization Code with PKCE but who's counting
like thats the only thing I want to know loll
I can find it and send it over
thanks! appreciate it
Uno momento por favor
It's not exactly pretty (thought only I would use it ha) but generic enough. You should be able to modify for your needs
I tried to go through and add some simple comments on the important stuff
Also this will only work in a config page for obvious reasons
also it looks some functions are marked async, probably as relics from old revisions 🙃
It does work but you might want to, uh, fix that
I basically have not touched this in 4.5 months 🙂
Oh wait you can use window.crypto.subtle.digest in the config?
"works on my machine" ¯_(ツ)_/¯
It is just a webview
YMMV. You should test it.
I don't exactly know the limitations of the config pages, especially on iOS. I just kind of try stuff and if it breaks, it breaks
😄
Yeah definitely, I got caught off guard by some thing on the MDN
You could do like a window.includes crypto or something and gracefully fail
this is also off topic about 
I mean it kinda is on topic since it's about implementing Spotify for Bobby
also sessions might be more secure than localStorage, blah blah library computer or something but whatever
Bobby also uses Clay. It may not be easy to implement this around Clay
Or something worth doing
I'm gonna try until I hit a brick wall :)
It may be easier to just link your spotify account to your Rebble account and some magic backend service uses that instead of using config pages
Also, since Bobby already does everything in the cloud, having this on your phone is pointless as it won't be at all useful
Maybe if you intercept tool calls? Not sure. Sounds interesting 😄
LMK how it goes!
Will do!
Bobby does not do everything in the cloud
Otherwise you couldn't set alarms on your watch.
More specifically, a bobby tool can opt into being given a pair of go channels, which it can use to send messages to and from the phone.
This is the mechanism by which alarms, timers, and timeline work.
Oh interesting
I was under the impression that everything was in the cloud and the app just kind of listened. I'll do some more digging into it when I have time™️
func alarmImpl(ctx context.Context, quotaTracker *quota.Tracker, args interface{}, requests chan<- map[string]interface{}, responses <-chan map[string]interface{}) interface{} {
ctx, span := beeline.StartSpan(ctx, "set_alarm")
defer span.Send()
if !query.SupportsAction(ctx, "set_alarm") {
return Error{Error: "You need to update the app on your watch to set alarms or timers."}
}
input := args.(*AlarmInput)
log.Println("Asking watch to set an alarm...")
requests <- map[string]interface{}{
"time": input.Time,
"duration": input.Duration,
"isTimer": input.IsTimer,
"action": "set_alarm",
"cancel": input.Cancel,
}
log.Println("Waiting for confirmation...")
resp := <-responses
return resp
}
That's the server side implementation of alarms
Very interesting
I will be sure to take a look. I do want to selfhost it to use my local llama thing (and of course add some fun hacks because why not)
Bobby implements a lot of very generic things that it then uses exactly once
The theory being that I'll come back and use them more.
And for that matter previously used more before I stripped out features like Hue light control
Reading through the rules for Spotify integration sure is an endeavour.
This part seems particularly hard to comply with:
Do not create a voice-enabled SDA that enables a user to control Spotify with their voice, or any kind of voice assistant that provides voice-control functionality.
So I think that's out the window
Disappointing, I had cool plans.
(Spotify also does human review before granting proper multi-user API access, so we couldn't just pretend to have not read the rules even if we wanted to)
home assistant can do some music control if you have chromecast around
that has some prerequisites though, namely having that set up
That is approximately seventeen more steps than I want to put people through
The thing I can actually imagine is having an optional Bobby Companion App that does some phone control on Android. That or Cobble expanding PKJS to support a lot more things, but if the Eric App is to be the primary pebble app I'm not sure that'll help
(though if they share a PKJS implementation maybe it's fine)
Bobby Companion App is also easier to ship in the short term.
yeah
What a shame
That's what I was thinking; companion PebbleKit app but that seems like a whole nother beast
bobby with agentic capabilities loll
Is it possible to do this with Youtube Music as well?
I don't think any specific service is happening
not to mention, youtube music doesn't track playback of other devices like spotify does
as annoying as it is, that's a pretty unique feature that every other service should but doesn't have
Time to add Sonos control to bobby.
Somewhat pointlessly because Sonos has its own pretty good voice assistant that controls music and has no other features
Oh interesting! This comes after I have found a Play:1 for $35 on Marketplace. I've only heard good things about them - maybe I'll pick one up 😄
Worth noting the Play:1 does not have the voice assistant because it does not have a microphone
I am more interested in
voice control 🙂
😄
I may have been joking. But it should be possible and I don't think they rules prevent it
It occurs to me that Bobby Companion App for music probably doesn't make sense because it can't change what's playing, and just having verbal start/stop/skip seems not super useful
I think the most common music uses would be (play/pause/skip and play <given song>). I'm not sure about this, but wouldn't a lot of music players have intents for these functions? You could eventually also let the user specify specific endpoints for each of those, which they could eventually link to IFTTT of Tasker, and maybe from there they can control music in a specific way?
The first three are standardised
The last one is not.
And if you just wanted to play/pause/skip you’d probably find it easier to just use the system music app
It’s harder than “play <given song>”, too, because you need to then know what to play next. So really you want “play <album>”, “play <playlist>”, “play songs by <artist>”
I’m not a huge fan of hooks for IFTTT or similar because a) that’s a lot of hoop jumping, and also b) those platforms are so flexible that it becomes hard to express when they should be invoked.
Generally I want Bobby to be a thing that Just Works, not a thing that requires tinkering
I concede that maybe this is the wrong thing for the Pebble audience (or at least the part of the Pebble audience that is on a Discord for Pebbles), but it’s generally most in line with my philosophy
Yeah that makes sense to me
I assume theres no way to just forward those play commands to Google Assistant haha?
Alas, no
Though if there were I don’t know why I’d bother building Bobby in the first place 😄
Because I don't want to take my phone out my pocket!!
But if I could forward commands to Google Assistant I’d just forward them all to Google Assistant and the result would probably be better
And easier
True
A Bobby Companion App could enable the return of Hue control
I had to remove it because Hue has removed the ability to make non-HTTPS connections, but serves an invalid certificate, so I can’t connect to the hub from PKJS any more
but no pony 🐴
(Or will remove that ability. They also removed the CORS headers from their discovery endpoint, which was the immediate problem I had, but the HTTPS thing is still pending too so it’d break eventually.)
Home assistant has been very focused on voice for the last year, and as such has a nice 'coversation API' you just throw a sentence at. But I don't know how you'd integrate that with Bobby, other than the horrible "ask Home Assistant ..."
I actually already built this
I just told it to pass the request to home assistant if it sounded like a home assistant type problem
This worked okay but at the time (2023) the home assistant voice stuff was worthless anyway
Ha, I guess that works too
Also the home assistant config turned into 50% of the config page
it might be more useful if bobby could know ahead of time what the layout of devices in home assistant is
It’d be sort of expensive to provide that as context to every request
I have 269 devices with 1,602 entities, apparently
impressive
I do have 4 devices called entry at this point, I feel like I might be bad at naming things
Apparently individual solar panels on my roof are each a device
As are ten different Rivian Phone Keys
Which is impressive given I do not own a Rivian or have any Rivian apps installed
What is Home Assistnat doing
hmmm
Three robotic vacuum cleaners
Which is more than I own
I think a primary problem with home assistant is that it is impossible to maintain a coherent universe.
yeah, too many things are classified the same way
physical and theoretical is the same class of object in there
Anyway this is basically why I’m not sold on putting Home Assistant back: because Home Assistant is so complicated that a) I’m not convinced I can construct a worthwhile integration with the amount of effort I’m willing to spend, and also b) I don’t think Home Assistant really lives in my “just works” paradigm
That's why I was thinking conversation API, you'd just need an endpoint & api key
But I get what you're saying
But then it still probably doesn’t work because Home Assistant broadly doesn’t work
Yes, that
And judging by the subreddit, it would most likely end up being forwarded to another LLM..
Gemini please ask other Gemini to turn the light on
Like two parents speaking through their child at the dinner table
Bobby just gave me a really good answer for information about the lunar eclipse
Told me about both lunar eclipses this year and gave me the time both in UTC and my local time
I like it has to be pointed out when bobby is actually helpful
oh that's bizarre, bobby straight up crashes whenever I asked it "when is it going to rain in charleston"
huuuh- thats basically what I asked it to get that screenshot
(pkjs works in cobble but it seems like location does not)
huh! reproduced over here!
it's so weird
running cobble
Is it possible to use our own API key to bypass the Gemini monthly limit if we have Gemini advanced in a future release? This is awesome, thank everyone who built and tested this.
banners fresh off the presses
The weather in Charleston is violence
you can host bits of the backend yourself afaik, and swap the LLM out for whatever you'd like
one of the goals for this being a polished product is that you do not need to copy and paste api keys around
this is true, it is so hot and humid
Oh gosh what happened to that poor thing
water damage to the backlight film. Kickstarter Times are not sealed properly and some steam got under the glass. you can't see it unless the backlight is on, but it's a snowy, so the backlight is gonna be on
I can't reproduce this crash
so I guess I will not be fixing it.
the text says sunday is actually thunderstorms, but there is no thunderstorm icon
meanwhile I spent an excessive amount of effort on one line of log output for no reason.
hooray valuable choices of how to spend time
[15:56:26] assistant.c:43> Bobby 0.18 (v0.18-7-g13460a1-dirty)
grabbing git refs always an annoying thing that should be built into build systems but basically never is
grabbing the git ref was trivial, it was getting the header to be generated that was annoying.
primarily because waf.
I eventually figured it was helpfully generating the header after the build process was complete.
specifically on the parenthetical. the version number just gets read out of the pebble metadata struct.
I don't even really have a use case for the tag. oh well.
I wonder if there'd be some way to get the model to recognize phonetics for place names or something
Because there's absolutely no way that the voice recognition will recognize almost any of the city names in my country
(it's almost certainly not worth it I'm just curious how feasible it would be
that'd be on the Google cloud speech end, not the model end
dictation all goes through the server first, all the pebble gets is the resulting text
I think the suggestion was that the model should be able to understand the mangled place names
just say "hey, what's the major city north from here known for fishing", and then ask the question when it figures it out
toki pona taught me how to work with speech recognition and ais >:D
My idea was that you could spell the name out using phonetics and the model could see those words and understand that it's a place name, yeah
have you tried it?
...I have not, let's see
I have spellt things to it before and it did get it
oh my god that actually worked
Although I'm wondering where the heck it got the Cyrillic name to show in the widget
The name in the widget is produced by reverse geocoding the actual location
so OpenStreetMap I guess
ah yeah that would make sense
osm always provides local language names
lmaoo
I should probably ask it to produce place names in the same language as the user is using
How do you do screenshots on Rebble-Tools? I know it's not related to Bobby, but it's been mentioned several times in this thread.
the usual command is pebble screenshot, so presumably rebble screenshot or whatever it's called.
That's it. Thanks!
still tempted to write a screenshot program that does not involve a python.
cobble
pass.
it involves a lot of kotlin instead
I don't know how well you are able to upload the new banners, does the dev portal support uploading more than 1?
Yes, you can upload up to 3 per platform
ah, I never had to upload a banner, it seemed like only one is supported
You can only upload 1 that gets used for all platforms during app submission, but up to 3 platform-specific after you've uploaded the app.
The weird behaviour during inital upload is because that's how the old command line tool we used for ~8 months worked.
I can correct that now that I have a local rws running again
cool
This is what you get when you edit a listing
ah yes
As fas as I'm aware, 3 is also an arbitrary limit which could be increased
Putting a pin in this for later
Downloading this as my first app once the RePebble (which they better call the Rebble) releases!
Rebble would be a bit of a conflicting name considering there's no practical association between rebble alliance and core devices (beyond being associated with pebble watches in one way or another)
I guess the release announcements are broken but I shipped a very boring update.
but the up button on the home screen does something now, so there's that.
hahahaha
that's hilarious
Love it!
feature request: when a timer runs out, it tells you how long the timer was
A tricky one, given it would a) need somewhere to show that, but perhaps more problematically b) would actually need to know
(Timers are just alarms that show a slightly different UI)
ahh, yeah that's understandable
in terms of a place to show it I was thinking it could show up in a smaller font under the "time is up" text, but it might not be worth adding the functionality to store the time for such a niche situation tbh
i think if you have multiple timers set, the time could be useful for distinguishing between which timer went off
but i don't know how often people are doing that in practice
probably not very
i asked that because I had that situation
i had a 45 minute and a 1hr15min timer, and i wanted to set a new 30 minute timer but then i realized I'd have no way of knowing which timer went off since I didn't know how much time was left before all of them
if multiple timers are going to be supported, i think the time should be displayed
because without it, supporting multiple timers ends up being a confusing feature
granted, that doesn't help if someone sets eg. 2 30min timers though
named timers? i have no idea how feasible that is to do
It's not particularly confusing in most contexts where you're going to do this, where you already know which timer will expire first
adventures in AI: I told one to make it possible to view and delete reminders both verbally and using a menu. behold: https://github.com/pebble-dev/bobby-assistant/compare/main...reminders
(and by "I told" I really mean "I engaged in a several hour long conversation", which I'm not sure was easier than coding it and I'm fairly sure was more tiring.)
oh and the code it generated will not run on iOS. must remember to fix that.
there, told it to fix that.
although granted I spent a bunch of that time having it build a feature to have a delete button on the timeline, largely finished it, only to abandon it when I realised that it won't work because the timeline updates too slowly.
for the same reason I am not sure I want to ship this, since a) you can remove things from the timeline and the app will still think they're there, and b) if you remove things from the app they will not immediately be removed from the timeline
Anyone have thoughts on having reminders not be write-only? Is it worth all the ways it can fail?
imo yeah, since it's so easy to set a wrong reminder way out in the future and then there's no way to cancel it
And a wrong reminder in general, where you then will have to wait for timeline to sync
This one worked #releases message
Did yours have any characters discord might have not liked in it?
@wooden wedge do you want to drop your 18px tiny icons from Bobby in the iconography repo? i will for mine
oh, sure
I think my conclusion here is basically that the timeline is deeply flawed and attempting to use it is a mistake.
At this point the bobby menu probably needs its own icons
we can add custom action buttons to a timeline pin, can't we?
am i understanding correctly that the problem is users can remove the reminder pin from the timeline without the app knowing it was removed? so if you delete a reminder from the timeline the app will still think it exists?
Yes, but then it'll a) duplicate the "remove" button that's already there, and also b) apparently do nothing due to timeline sync delays
I built that, realised it was terrible, and removed it again
i wonder if it would read properly to have "cancel reminder" alongside the system "remove"
alright, fair enough
The duplication is okay
The fact that it does not actually remove the reminder when pressed is unacceptable
timeline sync every 30 seconds
ahh. the app can't remove a pin locally, it has to go through the server and remove at the next sync up-to-15 minutes later
Yup
yeah thatll do it
Same when bobby removes one that is already in your timeline, incidentally
did pebble, inc have a solution to this? did they just cloud-push timeline and hope that it was fast enough?
It'll stick around for a while, possibly including it firing
Partially: timeline sync was faster. But also not very reliable, so not really.
As indicated by the "remove" button, mostly having your own remove buttons wasn't done
The calendar and alarm pins are a special case that use a totally different mechanism
huuuuh. okay
(in fact they also use mechanisms that are different from each other)
The alarm pins are set by the watch directly onto itself
That calendar pins are set by the phone
Neither goes to a server
So they can be fast and know the actual state
But no API exists to do that as a third party app
If I'm going to have a list I also need to figure out how to render long reminders in it
I mean now that we have our own apps, we could probably do a JSKit API for that?
the whole-platform approach that would make sense to me is to have the watch provide a callback to whatever app or service set a pin to timeline
like, the system "Remove" button is always there, but now you can attach an HTTP push to it like you can for your own actions. Remove, And Then
you get the instant feedback on the user's watch, and your backend still gets to handle it
however, this isn't helpful for making an app right now against the old pebble phone app, also rebble's own app doesn't fully implement any of this stuff yet anyway
maybe i'll experiment with it
An HTTP push is pretty annoying too because it means that the storage has to live on a server, which in this case it does not
Though the alternative is to launch the app when the pin is removed, which is also no good.
Bobby watch face when?
@covert ingot keeps making them
I have made so many
The generator should be live stoon then I can actually release one
maybe I should make a bobby watchface that has quotes and animations. not that I have a clue what what the quotes and animations would be
would give some value to the effort I put into that completely pointless speech bubble layout
(this is not a thing I'm likely to actually do)
What I was thinking was a companion face
like, either stuff Bobby does or other relevant information
so, reminders
just have a little 'next reminder' comlication
or timer
siri-watchface-but-pebble is the dream yeah
Unfortunately this isn't actually doable because pebble apps can't communicate
So there's no way that the watchface could read what the app knows
(unless, of course, I pushed everything to a server)
it would be kinda funny if you could ask bobby to pin something to the watchface
that'd be handy
persistent reminder
my smartglasses have this function - I can hold a button and tell them something and then they just show whatever I said persistently whenever I look up
reminders.
nice!
(this screen was actually entirely generated by AI, I just nudged the text up three pixels. and fixed its date calculations. and now I'm going to fix the time rendering.)
oh, I thought you meant image generation, I was going to be so impressed by that
Gonna Them on Garay at 46:6(l) PM
14t!
i enjoy "reminders minder"
mind your remind
I am once again mad that strftime has no way to emit standard US time formatting
though it has no trouble with everywhere-else-on-the-planet formatting
(in the US, the hours should have no leading zero. strftime puts a leading zero there anyway.)
Pebble has a function to do the right thing for everyone, clock_copy_time_string.
But of course the exposed version can only do the current time.
right; you'd do it at the server level I guess but you're right I don't know how that would work in the Rebble setup
It would mean I'd have to actually send all these things to the server, where currently they aren't.
I see
I guess I can ship that
hopefully people can figure out what their reminders are from the first couple of words and a time
looks great
you can also ask it
also ask it to remove them
I feel like the bobby main menu needs icons now
i guess you could just leave bobby open as if it were a watchface
I think a lot of them already exist
alarms, timers, reminders, quota, legal, about
alarms, timers, reminders are all system icons that presumably exist in 25x25 already
about can just be the app icon again
i have an 'about' 25px but it's a little lackluster
actually thinking about it I guess "deleted reminders" should have an action box confirmation thingy
time to remember how those work
I think it makes sense for about to be a horse
also they would all ideally be bitmaps and not pdcs because bitmaps are what a SimpleMenuLayer supports
and using a ComplicatedMenuLayer is more effort
i wish pdcs worked
there we go
somebody should draw a horse being neuralyzed
I was going to try it on iOS to see whether that still worked, but in standard Pebble fashion, everything refuses to pair
there we go. had to factory reset the pebble, of course.
of course, now the watch is wholly unusable because firmware updates don't work.
this is the reason I gave up on using Pebbles before the company even collapsed
they just don't work.
update almost complete!
I have published a bobby update.
(once again, the releases bot has ignored it.)
but now these reminder features exist
Why does release bot hate you
What did you write in the textbox? I'll try it locally
Discord is very picky
neither of the last two worked.
but every one before that did
I might guess it's related to the changes that you deployed between the last time it worked and the first time it didn't. Though don't ask me why.
Yes and no. It appears bobby's pbw is missing manifest.json
Which is upsetting pbw.py when getting the app UUID to check if it's a generated watchface
So they are. It just happened the first test .pbw I downloaded also had manifest.json in the root for some reason
Traceback (most recent call last):
File "/home/will/.local/lib/python3.10/site-packages/flask/app.py", line 1473, in wsgi_app
response = self.full_dispatch_request()
File "/home/will/.local/lib/python3.10/site-packages/flask/app.py", line 882, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/home/will/.local/lib/python3.10/site-packages/flask/app.py", line 880, in full_dispatch_request
rv = self.dispatch_request()
File "/home/will/.local/lib/python3.10/site-packages/flask/app.py", line 865, in dispatch_request
return self.ensure_sync(self.view_functions[rule.endpoint])(**view_args) # type: ignore[no-any-return]
File "/home/will/Documents/rebble/appstore-api/appstore/developer_portal_api.py", line 188, in submit_new_app
announce_new_app(app_obj, pbw.is_generated())
File "/home/will/Documents/rebble/appstore-api/appstore/pbw.py", line 126, in is_generated
return str(self.get_app_metadata()["uuid"]).startswith(GENERATED_ID_PREFIX)
File "/home/will/Documents/rebble/appstore-api/appstore/pbw.py", line 98, in get_app_metadata
app_manifest = self.get_manifest()['application']
File "/home/will/Documents/rebble/appstore-api/appstore/pbw.py", line 89, in get_manifest
raise FileNotFoundError("Could not find {}; are you sure this is a PebbleBundle?".format(self.MANIFEST_FILENAME))
FileNotFoundError: Could not find manifest.json; are you sure this is a PebbleBundle?
This was the error. pbw.py is sad about something and I've not altered that, other than to add this line:
https://github.com/pebble-dev/rebble-appstore-api/blob/master/appstore/pbw.py#L126
PBW takes a platform argument and does nothing useful without it.
What platform is it assuming?
ohhhhh
If it never tried to actually read any metadata, nothing would've noticed that it's assuming aplite support
Yep, I'm all caught up now
The rest of the validation process is only looking at appinfo.json
Fixed. Time for bed.
I'm going to add timer and alarm naming, re earlier conversation
Me: Delete my banana alarm
[Reminder deleted]
Bobby: My mistake, I can only delete reminders, not alarms. I can delete the alarm called Banana, would you like me to do that?
[Alarm canceled]
Bobby: OK, I've deleted the alarm called Banana
the AI experience
featuring:
- Doing the wrong thing
- Apologising and saying it cannot do the thing I asked it to do, then saying it can do the thing I asked it to do and asking whether I want it to do that
- Immediately completing the original request without waiting for a response to the question
I think alarms and reminders having different deletion mechanisms has confused it; need to fix that.
Trying to figure out how to fit timer and alarm names into the relevant menus.
timers are easy
I guess for alarms maybe I swap it and put the title as the title and the entire alarm time as the subtitle
I'm doing I'm doing thank how help. thank how help.
I suppose replacing the confirmation with the widget means the model could technically lie about setting a timer
Since the model can freely produce that widget as well
But if it does that the lie detector will still fire, and I've not seen it happen
I wonder if this timer should be centered
something bothers me about it
more margins is always the answer
get rid of that pesky info density
more seriously, 2px above the icon and 4px below the running time might help some? i feel the bother but I can't put my finger on it either
Earlier iterations were both of those things and I liked that less
(Bit off topic sorry, but seeing all the screenshots in this thread reminded me why I liked building Pebble apps but in the day. The interface is just clean and great)
it's strange but it's conceptually good
maybe a dumb question - is it helpful in these cases to receive the answer in both formats? i like the conversational aspect of bobby replying, but it feels like you just get the answer twice
is that like, the output of the lua thing, or is it picking the most likely relevant number from the llm's output
only one of those involved a lua!
the big thing for me with the card ui specifically is that i know i can trust what is inside a card
the LLM is just telling it what to put there
so i am not big on the idea of cards the llm can populate itself
The countdown cards from above are also populated by the LLM, mind.
The weather cards are technically trustworthy but that is mostly an implementation choice because I don't trust the LLM to correctly fill in all that data.
but like a countdown card is not going to appear just because the LLM thinks there should be a countdown card
it appears because something happens outside of the fallable llm world
I originally didn't have the lines but that looked weirder.
no, the countdown card appears whenever the LLM wants there to be one
the only things it doesn't control are the ones with a stripe down the left
it feels like the most helpful time for there to be additional info beyond an answer in a card is the conversational response providing additional information (particularly if it's calling out an error or something, like a timer not actually being set)
It'd also be nice to get the "Bobby" heading above the number, but that is easier said than done.
huh, alright, i did not realize those were different
but that otherwise you're just getting the height of a mountain two different ways, for example
one of which generally requires less reading
sometimes it goes particularly useless and decides to put the big number widget at the end
well i think it's great conceptually
big text walls kind of suck on pebble, so the more that we can do as not a wall of text, the better
yeah, i'd agree with that
what if I tell it to just not provide the conversational text where it's redundant?
misses out on the conversational feeling with bobby, but it does feel like the correct tradeoff in cases where a card makes sense
this is great
oh no, something went very wrong
what?
theUnited
oh
what even are those characters
bobby's poppin off
I'm at 8% I think I don't use bobby enough
my watch is currently out of charge though so not that I really can use it
that's a fun one
huh, apparently if it doesn't generate any text I'm not allowed to continue the thread.
well I'm not sure I want to ship this number widget
I still think the idea is decent
i like it!
like I feel this is nicer than reading a textual answer
i feel like if a card like this could be paired with an icon of bobby's face (or honestly if you just put the "Bobby" header above it) that would imply bobby is serving you the answer in a similar way to the more text-heavy answers. maybe that would be worth exploring?
rather than the card completely in a vacuum, i mean
moving the bobby header is much more difficult than it sounds because it's part of the text response and not separate.
though it probably is the right thing to do
oh, i make no claims that any of that would be easy 😆 i always assume programming will be hard
(I can put a bobby header above the card but then it will be duplicated if it also adds a textual response)
could/should the bobby header be abstracted out so that it always displays above the response to a query as a whole? meaning like, if the response is going to be a card/graphic and also a more drawn out answer, the bobby header goes once above all of that?
could those number responses have an icon of some kind I wonder
like a thermometer next to temperature
I am making this complicated aren't I
I don't think I want to go down the path of letting it pick an icon to go with its number
sometimes Bobby stops responding and starts responding again, which is weird but the dialog doesn't make much sense if it doesn't have the repeated Bobby header when it does that
that makes sense. so maybe the bobby header gets repeated if enough of a pause happens between messages?
but if they're fast enough back to back then it wouldn't
maybe
I do not think a time-based solution is the answer
that's fair
it feels sort of elegant to me - kinda like how our discord messages work. if i send them back to back they're grouped, but if enough time has passed they don't, even if no one has replied
or maybe i just hallucinated that
Time is not really the defining feature here, though.
Either way the followup response is probably going to happen less than a second later
so then why would it not make sense to not repeat the header? i'm not following
why is repeating the header important there, to remove the double negative ^
Because conversationally it finishes a response and then starts a new response
The header is a handy way to distinguish those
but again, it's the "same person horse talking" - like a discord DM. if you're not the one inputting text then the only one "speaking" would be bobby, logically
i'd defer to you though. i'm probably not thinking of an important example where it would look/be weird
to me it feels like you'd "just" put a little extra padding between subsequent responses. but that could totally look weird/bad or just be confusing
frankly the content there is completely irrelevant, it's figuring out where to put it when
whether the word "Bobby" is there is wholly inconsequential.
anyway I'm just going to ship this as-is.
speech recognition strikes again
extremely big numbers are a problem
I think the number probably needs a 'bobby' header at least
since the 'bobby' header indicates 'LLM generated', not 'ground truth from the system'
I regret this entire affair.
okay, I have done that.
it applies to all the widgets, not just this one
conversely, setting things:
I do prefer it
the "bobby" text is now a horrible hack and is completely unrelated to the "you" text
oh well
time to push another update
it is done. though unsurprisingly ignored by the releases bot.
Anyway, as always, let me know what you think
I guess bobby is approaching a shipping state
Still nice to have:
a warning when you don't have a subscription- a warning when you're using cobble
a feedback mechanism- icons in its main menu
- maybe announcing release notes in the app?
- a dedicated little website?
Bonus fact: the running horse animation now also appears when loading the reminders menu
It is my general purpose loading animation
Small website for a small horse?
time to switch out spinning ball with a horse on your computer too
there's never enough horse after all
rotating 3d text and a lot of glitter
Doable
"check out the bobby assistant from rebble! it does these things: download on your pebble today! requires rbl sub to cover voice and gemini costs"
Basically
Probably at bobby.rebble.io or rebble.io/bobby
Release notes with pictures
wordart
new "feature", now when you have Bobby feedback you can pick 'Feedback' from the menu and it will be delivered to me (along with some debug information)
Anybody have a video of Bobby in action? Curious about the speed of the responses
it's pretty damn fast actually. the dictation takes longer than the llm response
Question about Bobby. How do I get it to vibrate when the timeline activates? It shows up but if I'm not looking, I'll miss the reminder.
Bobby seems very excited about being able to use reminders over timers 
Hm.
Oh, I think that happened to me yesterday too. I got the timer error message and then I was confused when I still got a notification - realizing now that the notification was in fact a reminder
I wonder how much harder I can yell at it over this one
it looks like Bobby is also suffering from the Rebble issues
is there such a big demand for rebble services rn?
yes, Eric linked to apps.rebble.io and it has all been down since.
oh shit
@harsh brook @finite night I have deployed a change that hopefully fixes this, let me know how it goes
I have traced our fundamental issue back to an extremely sad postgres server that now has twice as much memory
I can only imagine a poor
getting angrily berated by a
horse as
just is trying its best to "how help"
I can imagine an incoming surge in Rebble subscriptions
this will be compsci in 2025
I mean you can see the diff
it is entirely in English
and consists of yelling at it slightly more.
I have just realised that here it thinks it set a timer, but still included the reminder warning blurb
that's fun
(if you set a reminder for less than an hour away, the response it gets back from the watch emphatically screams at it that it must include the warning.)
I have no idea, actually. Timers and alarms are extremely aggressive, but for reminders I think it's just subject to your normal notification settings, whatever those are
Unless you set a reminder at the same time as the pin, I don't believe you get notified when it becomes active
I set a notification!
Never mind then! 😊
This appears to be working now 🙂 Thanks Katharine
🎉
I was going to say it's ready to ship soon but I think Eric's news may have drowned any announcements of anything I may try to make.
I think I still need menu icons
Alarms, Timers, Reminders, Quota, Feedback, Legal, About
are you going to add voice feedback to Bobby for the new Core Devices when they come?
unclear!
I have no idea how I'd get audio to the watch
but in principle, yes, if it were doable
I think that would be cool, to have Bobby speaking back to you, Siri style
There is world where I rejig it all to use multimodal gemini and do straight audio in/out with no text
Just send a PCM wave stream to the watch, easy 🙃
that sounds like a pain
(and then do some ASR to get the text transcript on screen)
it is.
I could do it now if I jumped through enough hoops
well, audio in, text out
eh maybe waiting to see how the audio stuff is implemented in the SDK makes more sense
have core devices said anything about putting the speaker in the SDK and/or what it will even do on the watch
they have not
have they said anything about the sdk at all
"it will use the existing one"
but a speaker that does nothing is pretty pointless so I assume there is an intent to have a plan
should ask in the ama if they plan to maintain [the sdk] or if it's left as an exercise for the rebbler
(then again the Pebble Steel LED does almost nothing, and the Pebble Time gyroscope does absolutely nothing)
there are definitely no games that use it
that's the accelerometer
I completely forgot 💀
I can do that tomorrow unless somebody else manages to do it earlier
tomorrow is in 8-9 hours
alarms, timers, reminders are presumably just 25x25 versions of the alarm/timer/reminder icons
(though I couldn't actually find a 25x25 hourglass)
no idea what quota/feedback/legal are
I think about is a horse
possibly the app icon horse
yeah, that might make sense
I think hourglass only existed in 80x80 in pebble icons
also maybe a bigger horse to go at the bottom of the about screen. I don't even know what it'll have other than an app version, a link to a website I haven't made, and a horse.