Mike Cann's avatar
Mike Cann
16 hours ago

I built my family a giant touchscreen

Last month I built something I lovingly call Cann-vas. It's a 40-inch IR-based touch screen that's running custom-built software. It acts as a sort of family home hub and is designed for big and little people.

Using Convex I built a number of "apps" for it including a daily whiteboard, a family calendar, a chores and pocket-money list, todos and even a map so my wife can track me at all times. I went on quite the rollercoaster building this thing but in the end I am really happy with where it landed.

Mike high-fiving his son beside the finished Cannvas family touchscreenMike high-fiving his son beside the finished Cannvas family touchscreen

You can see it in action in the video linked above, or read on for all the details.

History

Okay, before we can talk about Cannvas we have to talk about my history with this project first. Let's hop in my time machine and go back eight years.

Eight years ago I built my Smart Mirror. It was a sort of family central hub, personal information device and hallway mirror at the same time.

It had a camera and a microphone so it could recognise who was stood in front of it and show info just for that person. You could talk to it and ask basic things, like telling you the time.

Ye, questionable utility on that one, but I thought it was cool back then. Don't forget this was way before modern AI was a thing. In my defence, these things were all the rage and had been popularised by the MagicMirror² project, a community and software platform for building smart mirrors. They're basically small computers attached to monitors and placed behind two-way glass.

Anyways I remember spending ages agonising over the planning and sourcing of materials of this thing. I looked into lots of different single board computers and picked out the right camera and microphone and display I wanted to use.

I disassembled the display so that I could fit it all in and get rid of some of the weight. I even went out and got a custom sized two-way piece of glass cut for it, which was NOT cheap!

I then went ahead and fabricated a custom wooden frame to house it all but to be honest I'm no wood worker so it was a bit sketchy in parts. But anyways once it was all done I assembled it all and hung it on the wall.

With all that glass and hardwood and whatnot it was pretty heavy and my wife wasn't overly confident in my construction or my stick-on-hooks way of attaching it to the rental apartment wall. In my defence it did actually hold up just fine and didn't come crashing down in the night or at any point for that matter.

But anyways that was the first version of the mirror. I did do a whole bunch of other clever stuff writing my own software for it and plugin system and whatnot but I'll spare you the details, I've left links to all of this at the bottom of this post.

Now this mirror worked well for a long time but after a few years when we moved house I ended up simplifying it a bit. I removed the microphone and camera as they never really worked well.

I also ended up removing the mirror part as I found that the reflection from the mirror was actually kind of annoying depending on the time of day and light conditions in the room. So ye it was basically just a computer with a monitor on the wall for a good while.

I did end up changing the frame out at some point so that it was this more sleek black number. Sadly though after 8 years of nearly continual use the monitor reached the end of its life as the backlight slowly started failing until one day it totally went.

I did look into trying to fix or replace it but decided it was probably not worth it particularly as I actually wanted to do something different for the next version.

The new mirror

Okay so it's 2026 now and I decided it was time to give this project a bit of an upgrade. Over the years I had simplified the old mirror's UI down to only displaying three things we wanted to see frequently.

  1. the time
  2. the weather
  3. family videos

We, and plenty of our visitors, would just stand there watching the family videos and seeing how my son had grown over the years. It was genuinely lovely. So for the new version I wanted to keep that, but make the device interactive rather than purely passive.

I wanted it to run different apps and act as our central family smart hub, with our calendar, todos, chores and whatever else I added later. The hardware needed to be:

  1. Large, big enough that you can see it from a distance
  2. Touch, I wanted to be able to touch it to interact with it, this makes it simple for my son to use.
  3. Light enough to wall mount myself and be portrait mountable because of the alcove it needed to fit in
  4. Preferably inexpensive

So with those goals in mind I started looking into options. What I was really looking for was something like those touch-whiteboard that you get in classrooms for kids.

It turns out those things are super duper expensive though, so that was kind of out of the question.

But on closer inspection of the one in my son's classroom, I noticed that its touch interface isn't some clever capacitive layer like you get on a phone or tablet. It's just a bolted-on infrared sender and receiver.

If you are not familiar with these, they work by having a row of infrared emitters on two sides of the screen then a corresponding row of infrared detectors on the other side. When you intercept one of the beams with your finger then it's able to detect the X and Y location of that interception and register it as a touch.

It's super simple and works surprisingly well and even supports multitouch which is great. And the very best news is that these things are relatively inexpensive and sold in kits that you can get to just about any size you want.

I figured that if infrared touch was good enough for those super-expensive classroom whiteboards, it was good enough for my little project. AliExpress had kits in just about every size, so I ordered a 40-inch TaiTouch kit for $146 Aussie dollars, or about $101 freedom dollars.

So the next question was the screen and fortunately this one was a lot simpler. I basically just wanted the cheapest 40-inch TV I could find.

I decided 40-inch was going to be around the size to cost tradeoff but looking at it in my alcove now I think I could perhaps have gone a bit bigger. My plan initially was to get something secondhand from Facebook Marketplace but unfortunately I'm 3 hours away from the nearest large city and thus the pool of available second hand stuff here was a bit limited.

So off to The Good Guys I went. The Good Guys is an Aussie version of what I think Americans call a "big box" store. It's got fridges, dishwashers, head massagers and a bunch of cheap TVs. I picked up a 40-inch FFALCON FF40S55 on sale for $279 Aussie, or about $194 USD. I had no idea how long it would hold up, but at this point I didn't even know if the project would work, so I wasn't ready to pay for a premium TV.

All I cared about was that it worked, used little power and could be mounted on the wall. Alright, now I had the TV and a way to make it touch-interactive. The final piece I was worried about was protecting the screen.

You see, TVs unlike phones or tablets aren't really designed for having a bunch of six-year-olds poking them. In fact they really don't like it.

So I knew I was going to need a protective layer in front of the TV. The ideal solution would have been a piece of glass like I used for my v1 Smart Mirror, but I really didn't want the expense and hassle of dealing with glass again.

Fortunately, I found some large acrylic panels at Bunnings. An Aussie institution, by the way.

I think they're designed for windows, doors or maybe windows in doors? Who knows. All I knew was that they were juuuuust about big enough to cover my 40-inch TV, so I grabbed one for 89 bucks. A couple of weeks later the IR kit arrived. Huzzah!

I gave it a quick test and it seemed to work, so I decided to plough on and put everything together.

So I popped the frame on the acrylic then cut it to about the right size then slapped it on the front of the TV. To bond the acrylic to the front bezel of the TV I used hotglue. I have no idea if this was the right call or not, it sort of works, it sticks but I don't think it's the strongest bond in the world.

I painted the glue black in an attempt to prevent light leaking into the screen, which I thought might cause internal reflections. It probably wasn't necessary. So far, so good. Things were going well. Maybe too well.

After leaving it to dry for a day or two, I excitedly hooked it up to the Raspberry Pi I was going to use for the project. That's when I noticed an issue. The touch interface worked great in some parts of the display, but not in others.

I first thought this was a driver level calibration issue or something. So I had a chat with Codex and we vibed out this little python based calibration tool and it sort of worked.

I could trace my finger around the display and it was accurate in some parts but jumped around badly in others. The screenshot below is from that test. As there was no official calibration software for Linux, only Windows, I thought this might be a skill issue on my part and maybe the only way I was going to get it working was on Windows.

So I hooked it up to my Windows PC and tried the manufacturer's official calibration tool. Nope! The same issue persisted. Ughh.

Fortunately, the Windows tool includes some lower-level diagnostics. The screenshot below makes the fault pretty clear: the X axis registered touches correctly, but the Y axis did not. That's when I contacted the manufacturer.

To my surprise, a few days later I received a WhatsApp request from a bloke called Rocky. It turns out he was a reseller rather than the manufacturer. I guess this is just how things work on AliExpress?

Anyways, after a bunch of back and forth that involved progressively taking it apart and reattaching everything, Rocky concluded that I had a defective unit and promised to send another. I was dubious, but I had to go on holiday for 10 days. It was lovely, by the way. The middle part of Western Australia is perfect at this time of year.

But true to his word, a couple of weeks later I returned home to an IR-shaped package. I excitedly unpacked and assembled it, then, having learned my lesson, gave it a thorough test.

And to my great relief, it worked! Whoohoo!

I forgot to take any pictures or video of the removal itself, but the padded sticky stuff that came on the IR frame was EXTREMELY sticky and clearly was not designed to come off once it had been stuck down.

It took a lot of careful prising with a few tools to ease it away from the acrylic. After an hour or so I finally got it off. I stuck down the new frame and repaired the spots where my slightly overenthusiastic prising had separated the acrylic. FINALLY, I had an assembled and working touch TV screen thing.

Yay! Now it was just a matter of attaching it to the wall. Easy, I thought.

My wife will happily tell you that planning is not one of my strong suits. I'm more of a hack-it-together-and-learn-as-you-go kind of guy, and generally that has served me well. This was not one of those times.

I wanted an adjustable wall mount so my son and his friends could pull the screen lower, while adults could move it up to eye level. So I paid quite a bit of money, $109, for a fancy gas-assisted wall mount.

The mistake I made was not measuring how wide the mount's arm was, and therefore how far the TV would stick out of the alcove once attached to the wall. Ye, it was going to look pretty stupid.

Back to the drawing board, and back to The Good Guys for a cheaper but still kind of pricey tiltable low-profile wall mount. I had to give up the nice gas-assisted adjustment, but by this point my wife was starting to question exactly how much I was spending on the project.

But like any self-respecting, project-obsessed husband, I assured her it would look great in the end and ploughed on. After drilling some holes, levelling it and screwing it in, I was just about ready to go. I had one last problem to solve.

How was I going to attach the Raspberry Pi and power adapter to the back of the TV? In the end, as with many of my projects, hot glue and zip ties came to the rescue.

I cut out these little bits of scrap wood I had lying around and then screwed the Pi onto it. I then did the same for the power socket, cutting some holes that I threaded zip ties through to hold it together.

I then applied liberal quantities of hot glue to the bits of wood and stuck them to the TV. That didn't work so I cracked out the superglue and that DID work.

Software

In the past this part of the project would have taken a long time. I spent weeks and weeks on the custom software for my first mirror. This time, thanks to vibe coding, I cracked open Codex, created a new project, told it to use Convex and explained how to SSH into the Pi. Then I let it rip.

An hour or two later and bam, I had a first usable version. Man I love AI.

It wasn't perfect at first. One thing I quickly realised was that if my son was going to be able to use it then all of the important controls would have to be at the bottom and not the more usual top of the display.

So I fixed that. I also wanted it to work as the digital photo frame I loved from previous versions, while still having "apps" we could interact with.

I didn't tell the agent how to do this exactly but it came up with this quite clever "screen-saver" like system that has widgets on it such as the weather, news, time and calendar. Then when I touch anywhere it takes me to the apps display which lets me select the various apps from a mobile like switcher at the bottom.

I mentioned these in the intro. The family whiteboard wipes every day, so we can leave little messages for each other, change the colour and whatnot. It even supports multitouch drawing, which is nice. Then there's the chores page. It replaces our old system, which was starting to confuse the heck out of me.

Anyways my son can open the chores app and check off a chore once he has done it. The total at the top shows how much pocket money he'll get at the end of the week. Then I have a todo list that syncs with my Google Tasks.

Then I have a family calendar that syncs up to my Google Calendar too. This is super useful as my memory is terrible.

Finally we have the Home Controls app, which lets me see and control the various IoT and smart-home things connected to my Home Assistant server.

The Home Controls app also hooks into my UniFi Gateway. It detects devices as they enter or leave the Wi-Fi and shows who is hogging the internets right now.

Home Assistant supplies the location data, so my wife can see where I am and make sure I'm not up to no good, such as buying more stuff I don't need from Bunnings.

Because this is a Convex project, all of the data is backed up to my cloud database. If I build a mobile app later, it can use that same data.

Everything worked great. I didn't tell it anything about Convex beyond installing the Codex Convex plugin. It just ripped, creating the schemas, functions and whatnot with barely any involvement from me. You really don't need to be a software or Convex expert to do this.

Oh there was one place where I leveraged my Convex knowledge. When I drew quickly on the whiteboard, the lines would flicker as though the app was overwriting what I had just drawn.

I suspected the problem was caused by the way the AI had written the Convex code. It used the useQuery hook while rapidly mutating the data, so an older server update could overwrite the line I had just drawn. Once I explained this to Codex and pointed it to the solution in my effect-sim project, it quickly fixed the issue. Now it works perfectly.

To be honest, I used my Convex knowledge to debug this one, but Codex probably could have diagnosed it from the symptoms anyway. Thank you, Dr Codex.

Conclusions

Overall, I think the project went really well and came together quite quickly. As for the expense, these were the final numbers:

PartCost
FFALCON 40-inch TVA$279.00
TaiTouch 40-inch IR touch frame, deliveredA$147.06
Bunnings acrylic purchaseA$89.43
LINDEN tilt wall mountA$69.00
Cable Chick gas-assisted wall mount, deliveredA$109.90
Raspberry Pi 5 8GB setup, deliveredA$322.52
IR-frame USB A-to-B cableA$14.95
1m mains power cableA$5.24
Double power adaptorA$2.84
USB wall plugA$9.90
Indicative totalA$1,049.84
Adjusted total without the mistaken mount and Pi setup I already ownedA$617.42

So the indicative grand total was about $1,050 AUD which is about $723 USD. That mixes what I actually paid for the main parts with current replacement values for the Pi and little bits I already had. More expensive than I would have liked, but if you exclude the $109.90 wall mount I bought by mistake and the $322.52 Pi setup I already had, you arrive at $617.42 AUD, or roughly $425 USD, which is a whole lot less than the classroom whiteboard. At least that's what I'll tell my wife.

There are a few things I would change next time. Firstly, I'd choose the TV more carefully, knowing it was going to be mounted in portrait rather than landscape.

The TV has a large raised housing on the back that holds its electronics. That part is heavier than the rest of the TV, so in portrait mode it causes the whole display to slant to one side.

I "fixed" it by hacking some tape onto one side of the mount to level it. It worked-ish, but it's not great.

If the weight had been more evenly distributed, I wouldn't have had this issue. The second thing I might change is the acrylic panel.

It was kind of expensive, and it naturally flexes when pressed. That means it touches the TV screen, which is exactly what it's supposed to prevent. Maybe I should have used glass instead, or perhaps gone without a protective panel at all.

Time will tell on that one, I guess.

Finally, now that I can see it in the alcove, I think I could have gone a touch larger. It looks a bit small horizontally. The problem is that a larger 16:9 display would also be taller, making the UI even harder for small people to use.

So did I accomplish my mission? Ye I think so. I constructed a large portrait touch screen that has all my favourite functionality from my old smart mirror project AND a whole bunch more useful stuff so that it can continue to act as the Cann family's central hub.

A Cann-vas, if you like. That's about all I've got. This build is a bit different from what I usually write about, so if you'd like to read about more hardware projects like this, drop me a message in the comments!

But until next time, thanks for reading everyone. Cheerio!


All gas, no breakages

Convex is the reactive backend platform that keeps up with you and your agents. Database, functions, workflow, sync, search, file storage, and more. All TypeScript, zero glue.

Get started