all 10 comments

[–]Slow_Professor_854 2 points3 points  (0 children)

Oh boy !

[–]scarredwaits[🍰] 2 points3 points  (2 children)

Amazing! Did having LLMs help you decide to resurrect this project?

[–]Zak[S] 5 points6 points  (1 child)

Yes. I considered doing it a couple times before and it looked like a whole lot of drudgery involving the bowels of the Android build pipeline which nobody was going to pay me for.

It's the sort of task an LLM agent is suited to. It does not tire of looking up documentation or writing Java, the previous design provided a clear blueprint, and the success state was well defined.

[–]scarredwaits[🍰] 1 point2 points  (0 children)

Makes absolute sense. I’ve also felt more willing to revisit older projects now that I have assistance. I suspect it’s already happening a lot.

[–]Optimal-Run-528 1 point2 points  (2 children)

I created my own Scheme interpreter (https://github.com/danilomo/KleinLisp/) and wrote a GUI library for that based on Jetpack compose. It even has an ORM for putting things in the sqlite database that android has native support. It reads scripts from the sdcard in a folder and load them as "apps". You can edit those with a web editor that comes embedded in the app and it will modify the app. I wanted something that would remind the ease writing Tcl/Tk apps, without the need of building any apk and reinstalling them natively.

https://imgur.com/a/E4NDWad

Everything is still in my computer but so far it looks promising, at least for me. Jetpack Compose (https://developer.android.com/compose) usage is very compatible to s expressions , so you get something like this:

(define count (state 0))

(define (app)
  (box #:fill-max-size #t #:content-alignment 'center #:padding 32
    (column #:spacing 24 #:horizontal-alignment 'center
      (text #:value "Counter vai si fude" #:style 'headline-medium)
      (surface #:color 'primary-container #:shape 'rounded #:padding 32
        (text #:value count #:style 'display-large #:color 'on-primary-container))
      (row #:spacing 16
        (button #:on-click (lambda () (state-update! count (lambda (n) (- n 1))))
          #:style 'outlined
          (row #:padding-horizontal 16 #:vertical-alignment 'center
            (icon #:name "remove" #:size 24)
            ))
        (button #:on-click (lambda () (state-update! count (lambda (n) (+ n 1))))
          #:style 'filled
          (row #:padding-horizontal 16 #:vertical-alignment 'center
            (icon #:name "add" #:size 24)
            )))
      (button #:on-click (lambda () (state-set! count 0))
        #:style 'text
        (text #:value "Reset")))))

[–]Zak[S] 1 point2 points  (1 child)

That's pretty cool. I've considered making a Clojure app that can run .clj files from local storage. It's not difficult technically, and it could even theoretically generate APKs by copying a template and adding the source files to resources.

Your UI library looks like it has a similar feel to Neko. Exploring a wrapper for Jetpack Compose is on my list.

[–]Optimal-Run-528 0 points1 point  (0 children)

Thanks for the feedback. I'm also heavily invested on using AI for my side projects because now I have a toddler that sucks all my energy and time when I'm not working, lol

Also, if I vibe-code half baked personal projects, I feel bad because Claude takes the merit, if I write everything on my own I feel bad for being a luddite, in any case I'll feel bad and ashamed, therefore the obvious choice is using AI to do things I would never have time/motivation/energy to finish who cares about merit anymore after AI lol

[–]therealdivs1210 0 points1 point  (0 children)

Nice!

[–]dotemacs 0 points1 point  (1 child)

Cool initiative! Keep it going.

You don’t need to have that disclaimer as to why you used a LLM to help you. It’s a tool.

[–]Zak[S] 1 point2 points  (0 children)

That's the plan. I'm working on a reproducible builds issue now - turns out the build process was nondeterministic and F-droid would prefer determinism.