The Internet Desk
I remember The Internet Desk fondly.

Gather round young'uns, let me tell you of a time where the the Internet only existed when you sought it out rather than embedding itself in virtually every aspect of our existence. Typically this would be at a single place in the home, something like the desk pictured above.
I think back to my time with the computer during those days and I vividly remember looking forward to spending time on it. Today it's impossible to get away from it, with hundreds of notifications a day and an expectation that you'll always be available at a moment's notice.
I suppose that's the trade-off for all the world's knowledge in your hand. I'm still not convinced it's a good deal. Instant gratification and algorithms everywhere has fried our brains a bit.
I've recently taken a break from a lot of social media, especially heavily algorithmic ones, and was wondering what it might be like if we could have The Internet Desk again.
The way I envisioned this is your computer (a MacBook Pro in this case) has its internet access removed if it's not at your desk. It's not perfect, and obviously doesn't work for cell phones, but it's a start.
Here's how it looks in action before I get into the details. This is the "aesthetic" version that comes complete with a dialup modem sound and an associated waiting period to let you really think about how you plan to spend your online time. There's also a utilitarian one that lets you get right to business with no waiting period.
It's a little tough to see, but I tried to illustrate network connectivity by keeping a Browser Ping tab open to show when I had network access vs not.
Breaking it down
There's a few problems to solve here:
- How do we tell if the computer is at the desk?
- How do we give the user some acknowledgement or ambience that it's Internet Time?
- How do we actually limit internet access in a fairly quick on/off way?
Presence Detection
We want to be able to detect the presence of a device with a few conditions:
- We should aim detect it as fast as possible
- It shouldn't require any software at all on the target device
- It shouldn't require any special device in any port on the target device
- It should require no action from the user other than setting down or picking up the device from the desk
I ended up going with NFC. I felt this was a good fit because you can apply tags in as simple a form factor as a sticker, they require no power, and are easily read by very low cost hardware. With the way I ended up designing things, I don't need to store any data on the tag itself, but you easily can store small amounts of data. In retrospect this might have been useful, but maybe I'll get to that in a future iteration.
On the hardware side I went with an Adafruit ESP32 Feather and a PN532 board that handles NFC reading. My typical way of working here is to start in Arduino land, so I was using the Adafruit PN532 library to mess around with it while I figured out the pin arrangements.
I initially tried using it in I²C mode, which is generally the easiest way of connecting these things, and I just could not get it to work. Did I have the GPIO pinout wrong? Does the library not work for the particular board I have? Are the dipswitches on the board wrong? I didn't even know there were dipswitches originally, and then when I did find them, trying to figure out the right arrangement seemed pretty difficult.

This part of the project is probably what took me the longest and was by far the most annoying. There's just so many different board configurations and revisions between the ESP32s and this NFC reader that you're just left with a lot of trial and error to find what will work. I moved on to HSU (High Speed UART) before finally biting the bullet and soldering on 6 more pin headers to use SPI which is supposedly more reliable with these (quite old) boards. It finally ended up working and I could read tag data.
To make this work with the device, I put the reader on the desk under a pad and then stuck an NFC card to the bottom of my MacBook. I ended up running into an issue where if NFC tags are touching metal they stop working, so I put a bunch of electrical tape and some anti-static bags under it to give it a barrier from the MacBook's metal case and it worked well enough for a proof of concept.
OK - so we have tag data...now what? How do we take some actions in response to recognizing a tag?
I decided to go with an old friend, ESPHome. I'm a big user of both ESPHome and its parent project Home Assistant to automate my home and is basically a de-facto rules engine for a lot of my projects. ESPHome makes it easy to manage firmware on the device and has a ton of abstractions for common peripherals (like the PN532!) so you can spend less time figuring out how to get signals off the device and spend more time doing the fun bits.
spi:
clk_pin: GPIO18
mosi_pin: GPIO23
miso_pin: GPIO19
pn532_spi:
cs_pin: GPIO5
update_interval: .5s
on_tag:
then:
- text_sensor.template.publish:
id: the_internet_desk_tag
state: !lambda 'return x;'
on_tag_removed:
then:
- text_sensor.template.publish:
id: the_internet_desk_tag
state: ""
text_sensor:
- platform: template
name: "The Internet Desk Tag"
id: the_internet_desk_tag
Setting up the SPI interface and piping tag changes off to a sensor in Home Assistant.
Tag changes then show up as a sensor:

From there, we can create automations that take actions when the state of the Tag ID entity changes. I went with a couple different ones:
- one was the Aesthetic version that changes the lights, plays a dialup tone and some other familiar sounds, and then changes the network state
- the other just changes the lights and proceeds as fast as possible to change the network state as requested
The automation has a mapping of NFC Tag ID -> MAC address of the device I'm targeting, which leads to the next section.
Network Blocking
At home I run Unifi equipment to power my network. The wonderful thing about Home Assistant is there's an integration for everything, and my network equipment is no exception. I already had my network in HA, and I just had to create a switch
entry in its integration that matched my MacBook's MAC address and it would allow me to toggle its access to my network on and off. Easy!
If you're following along at home, make sure your MAC address isn't set to rotate, otherwise this part doesn't work properly.
Thanks for reading!
In day to day usage, I'd use the utilitarian version of the automation, but the aesthetic one is fun. Very nostalgic. You used to have a few seconds to think about what cool Geocities website you'd try and check out before you got connected.
The code is on GitHub.
I have a few more projects I plan on sharing here in this vein, so if you're interested please sign up below or follow me on Bluesky.