Building mobile apps for a living

Building mobile apps for a living

/ #Misc


I have always been intrigued by building something, and making a living of it.

I have built a couple of mobile apps previously, and also a few games. But it has never turned into anything.

The "biggest" app I have built so far is called Roadlifer. I spent months building this app, and it didn't get that many downloads. I definitely need to do some more work to it, and add a lot of content.

The amount of time I spent building the app VS the return discouraged me, so I put this idea on the shelf. I didn't do any marketing, so this was obviously my own fault. But I also don't think I should have spent so much time building it without actually releasing it.

My new strategy

But now I have a new strategy. I'm going to build a small portfolio of much smaller apps. Instead of aiming to build "the one" app, I'm going to build many smaller apps.

With this approach, I can jump straight onto the next idea if I see that it didn't work out. And if one of the apps gets some traction, I can keep working on it and add more features.

So far, I have released two apps in 2026. One called "Jotty - Daily Micro Journal", and one called "HabloLocal - Speak like the locals".

Both of these apps are very simple, and I didn't spend too much time building them.

My next app

The next app I'm releasing, and currently working on is an app called "Pote". This is going to be a pet health tracker. You can use it to keep track of information about your pet. Like the weight, upload important documents like images of the passport, receipts, x-rays, etc.

But you can also use it to set up reminders for when your pet needs a new vaccine, or when you have an appointment at the veterinary.

My goals for 2026

So my goals for 2026 will be to publish at least 10 apps. I'm building a system for building them, and I'm trying to create reusable components, so that the next app I'm building can reuse a lot of the code I have already made.

My goal isn't to make millions of dollars (not that I would say no thank you), but the goal is to get to a recurring revenue that is sustainable, and can support me and my girl friend.

If you have any question about this upcoming journey, feel free to leave a comment below :-)

Comments

NYxipzlZOMVHDuMdGMwLzm | Mar 28, 26 05:20

wMRoMLYoAAYiGCSMfJI

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

-1 OR 2+545-545-1=0+0+0+1 --

EFSArCBy | Jul 02, 26 07:17

-1 OR 2+622-622-1=0+0+0+1

EFSArCBy | Jul 02, 26 07:17

-1' OR 2+200-200-1=0+0+0+1 --

EFSArCBy | Jul 02, 26 07:17

-1' OR 2+468-468-1=0+0+0+1 or 'ZvLk558x'='

EFSArCBy | Jul 02, 26 07:17

-1" OR 2+551-551-1=0+0+0+1 --

EFSArCBy | Jul 02, 26 07:17

555*if(now()=sysdate(),sleep(15),0)

EFSArCBy | Jul 02, 26 07:17

5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z

EFSArCBy | Jul 02, 26 07:17

5550"XOR(555*if(now()=sysdate(),sleep(15),0))XOR"Z

EFSArCBy | Jul 02, 26 07:17

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

EFSArCBy | Jul 02, 26 07:17

555-1; waitfor delay '0:0:15' --

EFSArCBy | Jul 02, 26 07:17

555-1); waitfor delay '0:0:15' --

EFSArCBy | Jul 02, 26 07:17

555-1 waitfor delay '0:0:15' --

EFSArCBy | Jul 02, 26 07:17

5558RLZ0tGA'; waitfor delay '0:0:15' --

EFSArCBy | Jul 02, 26 07:17

555-1 OR 983=(SELECT 983 FROM PG_SLEEP(15))--

EFSArCBy | Jul 02, 26 07:17

555-1) OR 702=(SELECT 702 FROM PG_SLEEP(15))--

EFSArCBy | Jul 02, 26 07:17

555-1)) OR 658=(SELECT 658 FROM PG_SLEEP(15))--

EFSArCBy | Jul 02, 26 07:17

555rkJYBcHr' OR 988=(SELECT 988 FROM PG_SLEEP(15))--

EFSArCBy | Jul 02, 26 07:17

555CwMn3Eqs') OR 319=(SELECT 319 FROM PG_SLEEP(15))--

EFSArCBy | Jul 02, 26 07:17

555yDOksCzu')) OR 36=(SELECT 36 FROM PG_SLEEP(15))--

EFSArCBy | Jul 02, 26 07:17

555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

EFSArCBy | Jul 02, 26 07:17

555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555'"

EFSArCBy | Jul 02, 26 07:17

@@NsPGD

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

-1 OR 2+551-551-1=0+0+0+1 -- | Jul 02, 26 07:17

555

-1 OR 2+200-200-1=0+0+0+1 | Jul 02, 26 07:17

555

-1' OR 2+800-800-1=0+0+0+1 -- | Jul 02, 26 07:17

555

-1' OR 2+548-548-1=0+0+0+1 or 'b5EGiIwT'=' | Jul 02, 26 07:17

555

-1" OR 2+692-692-1=0+0+0+1 -- | Jul 02, 26 07:17

555

if(now()=sysdate(),sleep(15),0) | Jul 02, 26 07:17

555

EFSArCBy0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z | Jul 02, 26 07:17

555

EFSArCBy0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z | Jul 02, 26 07:17

555

EFSArCBy-1 waitfor delay '0:0:15' -- | Jul 02, 26 07:17

555

EFSArCByBkJKMAza'; waitfor delay '0:0:15' -- | Jul 02, 26 07:17

555

EFSArCByU1avxJDC' OR 185=(SELECT 185 FROM PG_SLEEP(15))-- | Jul 02, 26 07:17

555

EFSArCByeYDTIJDA') OR 430=(SELECT 430 FROM PG_SLEEP(15))-- | Jul 02, 26 07:17

555

EFSArCByFNgpnwel')) OR 303=(SELECT 303 FROM PG_SLEEP(15))-- | Jul 02, 26 07:17

555

EFSArCBy'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||' | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy'" | Jul 02, 26 07:17

555

@@fD0Op | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 02, 26 07:17

555

EFSArCBy | Jul 20, 26 08:19

555

EFSArCBy | Jul 20, 26 08:20

555

EFSArCBy | Jul 20, 26 08:20

555

EFSArCBy | Jul 20, 26 08:20

-1 OR 2+604-604-1=0+0+0+1 --

EFSArCBy | Jul 20, 26 08:20

-1 OR 2+428-428-1=0+0+0+1

EFSArCBy | Jul 20, 26 08:20

-1' OR 2+21-21-1=0+0+0+1 --

EFSArCBy | Jul 20, 26 08:20

-1' OR 2+849-849-1=0+0+0+1 or 'QAInrQVz'='

EFSArCBy | Jul 20, 26 08:20

-1" OR 2+758-758-1=0+0+0+1 --

EFSArCBy | Jul 20, 26 08:20

555*if(now()=sysdate(),sleep(15),0)

EFSArCBy | Jul 20, 26 08:20

5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z

EFSArCBy | Jul 20, 26 08:20

5550"XOR(555*if(now()=sysdate(),sleep(15),0))XOR"Z

EFSArCBy | Jul 20, 26 08:20

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

EFSArCBy | Jul 20, 26 08:20

555-1; waitfor delay '0:0:15' --

EFSArCBy | Jul 20, 26 08:20

555-1); waitfor delay '0:0:15' --

EFSArCBy | Jul 20, 26 08:20

555-1 waitfor delay '0:0:15' --

EFSArCBy | Jul 20, 26 08:20

555nNsS34L2'; waitfor delay '0:0:15' --

EFSArCBy | Jul 20, 26 08:20

555-1 OR 336=(SELECT 336 FROM PG_SLEEP(15))--

EFSArCBy | Jul 20, 26 08:20

555-1) OR 162=(SELECT 162 FROM PG_SLEEP(15))--

EFSArCBy | Jul 20, 26 08:20

555-1)) OR 198=(SELECT 198 FROM PG_SLEEP(15))--

EFSArCBy | Jul 20, 26 08:20

555cCt9W9Hi' OR 892=(SELECT 892 FROM PG_SLEEP(15))--

EFSArCBy | Jul 20, 26 08:20

555ZmlMyocz') OR 434=(SELECT 434 FROM PG_SLEEP(15))--

EFSArCBy | Jul 20, 26 08:20

5555YdOauA6')) OR 671=(SELECT 671 FROM PG_SLEEP(15))--

EFSArCBy | Jul 20, 26 08:20

555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

EFSArCBy | Jul 20, 26 08:20

555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

EFSArCBy | Jul 20, 26 08:20

555

EFSArCBy | Jul 20, 26 08:20

555'"

EFSArCBy | Jul 20, 26 08:20

@@IEFyZ

EFSArCBy | Jul 20, 26 08:20

555

EFSArCBy | Jul 20, 26 08:20

555

EFSArCBy | Jul 20, 26 08:20

555

EFSArCBy | Jul 20, 26 08:20

555

EFSArCBy | Jul 20, 26 08:20

555

EFSArCBy | Jul 20, 26 08:20

555

EFSArCBy | Jul 20, 26 08:20

555

EFSArCBy | Jul 20, 26 08:20

555

EFSArCBy | Jul 20, 26 08:20

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

-1 OR 2+950-950-1=0+0+0+1 -- | Jul 20, 26 08:21

555

-1 OR 2+369-369-1=0+0+0+1 | Jul 20, 26 08:21

555

-1' OR 2+451-451-1=0+0+0+1 -- | Jul 20, 26 08:21

555

-1' OR 2+151-151-1=0+0+0+1 or 't6VqiTSO'=' | Jul 20, 26 08:21

555

-1" OR 2+754-754-1=0+0+0+1 -- | Jul 20, 26 08:21

555

if(now()=sysdate(),sleep(15),0) | Jul 20, 26 08:21

555

EFSArCBy0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z | Jul 20, 26 08:21

555

EFSArCBy0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z | Jul 20, 26 08:21

555

EFSArCBy-1 waitfor delay '0:0:15' -- | Jul 20, 26 08:21

555

EFSArCBy3L9oRrBb'; waitfor delay '0:0:15' -- | Jul 20, 26 08:21

555

EFSArCBy3JO3oFGQ' OR 975=(SELECT 975 FROM PG_SLEEP(15))-- | Jul 20, 26 08:21

555

EFSArCByPdT8L7cR') OR 184=(SELECT 184 FROM PG_SLEEP(15))-- | Jul 20, 26 08:21

555

EFSArCBy8yXimt73')) OR 735=(SELECT 735 FROM PG_SLEEP(15))-- | Jul 20, 26 08:21

555

EFSArCBy'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||' | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy'" | Jul 20, 26 08:21

555

@@GIn1I | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 20, 26 08:21

555

EFSArCBy | Jul 23, 26 11:07

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

-1 OR 2+246-246-1=0+0+0+1 --

EFSArCBy | Jul 23, 26 11:08

-1 OR 2+91-91-1=0+0+0+1

EFSArCBy | Jul 23, 26 11:08

-1' OR 2+379-379-1=0+0+0+1 --

EFSArCBy | Jul 23, 26 11:08

-1' OR 2+37-37-1=0+0+0+1 or 'DCbeV1V0'='

EFSArCBy | Jul 23, 26 11:08

-1" OR 2+128-128-1=0+0+0+1 --

EFSArCBy | Jul 23, 26 11:08

555*if(now()=sysdate(),sleep(15),0)

EFSArCBy | Jul 23, 26 11:08

5550'XOR(555*if(now()=sysdate(),sleep(15),0))XOR'Z

EFSArCBy | Jul 23, 26 11:08

5550"XOR(555*if(now()=sysdate(),sleep(15),0))XOR"Z

EFSArCBy | Jul 23, 26 11:08

(select(0)from(select(sleep(15)))v)/*'+(select(0)from(select(sleep(15)))v)+'"+(select(0)from(select(sleep(15)))v)+"*/

EFSArCBy | Jul 23, 26 11:08

555-1; waitfor delay '0:0:15' --

EFSArCBy | Jul 23, 26 11:08

555-1); waitfor delay '0:0:15' --

EFSArCBy | Jul 23, 26 11:08

555-1 waitfor delay '0:0:15' --

EFSArCBy | Jul 23, 26 11:08

555WraUQYSI'; waitfor delay '0:0:15' --

EFSArCBy | Jul 23, 26 11:08

555-1 OR 200=(SELECT 200 FROM PG_SLEEP(15))--

EFSArCBy | Jul 23, 26 11:08

555-1) OR 978=(SELECT 978 FROM PG_SLEEP(15))--

EFSArCBy | Jul 23, 26 11:08

555-1)) OR 971=(SELECT 971 FROM PG_SLEEP(15))--

EFSArCBy | Jul 23, 26 11:08

555qcXEbLBo' OR 373=(SELECT 373 FROM PG_SLEEP(15))--

EFSArCBy | Jul 23, 26 11:08

555dyyR4x5p') OR 664=(SELECT 664 FROM PG_SLEEP(15))--

EFSArCBy | Jul 23, 26 11:08

5558gqAll8C')) OR 690=(SELECT 690 FROM PG_SLEEP(15))--

EFSArCBy | Jul 23, 26 11:08

555*DBMS_PIPE.RECEIVE_MESSAGE(CHR(99)||CHR(99)||CHR(99),15)

EFSArCBy | Jul 23, 26 11:08

555'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||'

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555'"

EFSArCBy | Jul 23, 26 11:08

@@ZXFxs

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

-1 OR 2+653-653-1=0+0+0+1 -- | Jul 23, 26 11:08

555

-1 OR 2+988-988-1=0+0+0+1 | Jul 23, 26 11:08

555

-1' OR 2+621-621-1=0+0+0+1 -- | Jul 23, 26 11:08

555

-1' OR 2+166-166-1=0+0+0+1 or 'rMPxPSyl'=' | Jul 23, 26 11:08

555

-1" OR 2+621-621-1=0+0+0+1 -- | Jul 23, 26 11:08

555

if(now()=sysdate(),sleep(15),0) | Jul 23, 26 11:08

555

EFSArCBy0'XOR(if(now()=sysdate(),sleep(15),0))XOR'Z | Jul 23, 26 11:08

555

EFSArCBy0"XOR(if(now()=sysdate(),sleep(15),0))XOR"Z | Jul 23, 26 11:08

555

EFSArCBy-1 waitfor delay '0:0:15' -- | Jul 23, 26 11:08

555

EFSArCByOugOPRB4'; waitfor delay '0:0:15' -- | Jul 23, 26 11:08

555

EFSArCBy2n0mFAfp' OR 112=(SELECT 112 FROM PG_SLEEP(15))-- | Jul 23, 26 11:08

555

EFSArCByruOkWenK') OR 856=(SELECT 856 FROM PG_SLEEP(15))-- | Jul 23, 26 11:08

555

EFSArCBy49L4df5N')) OR 282=(SELECT 282 FROM PG_SLEEP(15))-- | Jul 23, 26 11:08

555

EFSArCBy'||DBMS_PIPE.RECEIVE_MESSAGE(CHR(98)||CHR(98)||CHR(98),15)||' | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy'" | Jul 23, 26 11:08

555

@@sEPi1 | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

EFSArCBy | Jul 23, 26 11:08

555

Add comment

Info

Please log in to comment!

Newsletter

Subscribe to my weekly newsletter. One time per week I will send you a short summary of the tutorials I have posted in the past week.