We're not just ships passing in the night; we're submarines lost in the depths, wholly invisible to each other until we actively ping.
sonar
is a basic Twitter clone, intended to run on a free-tier AWS stack as a demonstration project for my portfolio. Still, maybe it could take off and turn me into an internet billionaire, right?
Demo server is now running at https://api.sonar.coriolinus.net/. If your user-agent accepts HTML, you get a HTML interface; otherwise you get JSON. Note that this is an API server, not a user-facing server: HTML interfaces are for developer convenience, and feature auto-generated documentation which may be misleading or incorrect. The API does work as specified.
- user signup / authentication
- user profiles (handle, real name, brief bio)
- user can create a
ping
: short message up to 140 chars - individual ping permalink view
- user timeline view showing most recent pings
- timeline will only ever be linear
- follow another user
- unfollow another user
- timeline view showing your pings and those of those people you follow
- reply to a previous ping
- individual ping replies view
These features need to be implemented in order for me to consider this a complete demo project.
- mentions view showing people writing about/to you
- hashtags / hashtag search view
- block another user (they cannot see you when logged in; you cannot see them when logged in)
These features would be great, but probably won't happen unless this starts to get a real userbase.
- hashtag overview view, sorting them all by popularity / date
- proper property-based testing (see note below)
- users can 'like' pings
- liked pings view
- users can 'echo' (retweet) pings. probably just links to it; we don't want the one-button retweet culture from twitter.
- password reset via email feature
- email notifications on mentions
- general search
- report a ping/user (don't want to take twitter's cavalier attitude against the trolls)
- inline photos / video
- http addresses auto-expand into links (likely to get pushed to the front end)
- user tags link to user view (likely to get pushed to the front end)
- log in with twitter to import your contacts
- twitter bot using sentiment analysis and search to find tweets criticizing twitter, ideally for non-linear-timeline or terrible troll issues, and suggesting sonar as a replacement.
Property-based tests are great, and I've had good results using the Hypothesis library to test REST APIs in the past. However, they take some additional time to implement. However, they do take additional time to implement. I really like them in production code. This, however, is not production code, and it's difficult to justify the additional time that property-based tests require in a demo project.
This project is the backend to the sonar website, implementing all features via a REST API. It's built in Python3 via Django and the Django Rest Framework.