In logic and related fields such as mathematics and philosophy, if and only if (shortened iff) is a biconditional logical connective between statements. (Wikipedia) 🤘
IFF is an online "get to do" list rather than a to-do list. You get to do a thing if and only if you complete the task or tasks you need to do.
Traditional to-do lists are typically comprised of unpleasant tasks or chores that need to be done, with no system of rewards. Studies have shown that temptation bundling, or coupling an unpleasant task with a reward, is a more effective way to get things done. IFF will allow users to combine pleasant and unpleasant tasks, and use social accountability as a motivating tool.
The IFF website will allow users to create an account, in which they will be able to store multiple "get-to-do" lists. Each list will have one get-to-do task and one or more to-do tasks. As the to-do tasks are checked off, the get-to-do task becomes available.
Example list:
I get to:
- play Xbox for one hour
IFF I:
- clean the garage
- send the final proposal to my boss
- work on my app for one hour
IFF will use Django in the backend to store user accounts and user lists. It will use VueJS in the frontend to display each list and provide basic functionality.
Core technologies:
- Django backend
- PostgreSQL for the user and list database
- VueJS frontend
- Materialize CSS for style
- Docker for containerization
- Deploy on AWS ECS
Potential users:
- Employees with set daily tasks
- Anyone who needs to do chores at home
- People trying to get in shape/lose weight can reward themselves for going to the gym, etc.
- Parents who want to give their kids incentives to do their chores
- Anyone who currently uses a to-do list app
Monetization: While the app will be launched as a free service initially, future monetization is possible via the following:
- Paid account levels with additional features:
- Free accounts can be capped at ~10 lists at a time, while monthly subscribers get unlimited lists and possible additional features such as shared lists.
- Paid iOS/Android app:
- Future iOS/Android versions can be downloaded from app stores for a fee
The user starts on the landing page, which will look like so:
A user signs up, and creates their first IFF list. They enter one get-to-do and how ever many to-dos they want.
Once a user has an account, their home screen shows a list of all of their IFF lists. If they click on one, they go to a detail page where they can see all their to-do items and can check them off. If all of a get-to-do's to-do items are checked off, they get a message saying they can now do their reward task, and the whole list disappears.
Users can also have a history (archive) of all of the things they've done and have gotten to do in the past.
There are three main data models:
-
User
- One-to-One relationship with Django User model, + extra fields
- Name
- username
- is_new_user? boolean - if true, get welcome screen
- email (not shown)
- password (not shown)
- profile pic ImageField
- short bio (300 chars)
- goals (where the user adds their top goals - 300 chars)
- friends (for future versions when users can share lists with friends)
-
List of IFF Tasks
- text of one get to do item
- can you do the get-to-do? boolean
- is the get-to-do completed? boolean
- user id of owner of list
- created date (for sorting)
- completed date
- is the whole list completed? boolean (for archiving)
-
Individual IFF to-do task
- text of task
- foreign key to IFFlist task is part of
- is it completed? boolean
The User model includes the user's login information, a profile picture, and all of their active and archived IFF lists. Future versions of IFF will add a social media aspect to the user profile, connecting users as friends and letting them see each others' IFF lists and even keep each other accountable by verifying that the to-do tasks were in fact completed (via photo or something like that).
The IFF Task model is just one get-to-do item followed by at least one to-do item. Each new task is an instance of the IFF model.
- Landing page
- Register modal
- Login sidebar
- New user welcome page with first IFFlist
- User profile completion sidebar on right
- Add IFFlist page
- Current/past lists sidebar on left
- Detail view for IFFlist
Due date: March 30th
Register domainAdd placeholder to domain (redirect to github for now)Set up Cookiecutter Djangounderstand WTF is going on with the files in it?
Set up DockerSet up PostgreSQL databaseSet up Django rest frameworkunderstand WTF it does
Set up Django projectdetermine Django IFFlist modelsdetermine Django class-based viewsdetermine User model
Set up basic frontend designset up base HTML fileset up all template HTML filesset up MaterializeCSS and make it play nice with everything elseset up navbarset up landing page changing text
Set up login and registrationset up register/login modalset up user sidebarset up user photo uploadsign out with modal, not new page
At the end of the week, the entire project is set up, including installing cookiecutter Django with Postgres and MailHog and getting them to play nicely together in a virtual env Docker (yikes!). A rough front-end including the landing page and user log-in screen is completed.
Due date: April 6th
Set up user registration abilitySet up auto email to user after registration, with confirmation linkSet up forgot password email/reset linkSet up welcome page for new user - add first ifflistSet up VueJS projectSet up profile sidebar and ability to add profile pic and bioSet up views with mixins to display current and completed ifflistsSet up add to-do capabilitySet up ability to save, complete and archive to-do listsWrite functions for adding, completing and editing todosWrite function to make get-to-do completion check appear only after todos have been completed
Finish front-end design of ifflist and ifflist lists (really need a better name)
Ability for users to register and add lists is complete. It doesn't have to look pretty yet.
Due date: April 13th (Capstone presentation day)
Make dropdown menu work in mobileCheck all pages in mobile view for good UX- make JQuery onboarding guide for new users (if time)
- add social page/links to tell friends
Test adding users, adding lists, savingDesign IFF logo, finalize color schemePresent capstone!
An MVP of IFF is deployed and live, with the ability for users to sign up. The frontend is finalized.
Due date: April 20th
Fix API post security issue!improve general mobile UXAdd https/SSL certificate- Deploy MVP on the interwebs using AWS ECS
User testing and debugging with actual users.
Due date: May 31st
- Get classmates/friends to sign up for initial testing
- add "sticky" ifflist option
- add Vue functionality to home page, so links go to specific ifflists
- in mobile view, make "Add ifflist" link go to add ifflist view
- Move user login/register/password interaction stuff into Vue views rather than Django views for better UX
- Add email reminders (that can be turned on or off) for completing of tasks
All bugs fixed and mass roll-out of platform. Functionality limited to signing up and adding up to 10 IFF lists at a time.
Due date: Fall 2018
- Profit?
Add social aspect to platform. Users can become friends, invite their friends, and show lists to friends who will keep them accountable.
Due date: end of 2018
Monetization of platform. Add premium monthly plan for unlimited lists.
Due date: Q1 2019
Monetization of platform. Add team premium tier where multiple people can share lists.
Due date: Q2 2019
Launch iOS and Android apps, Mac desktop app in the menu bar?
Due date: ?
Sell IFF to Mark Zuckerberg and retire to a private island.
(for future versions)
Bug/feature spreadsheet: https://docs.google.com/spreadsheets/d/1of64JAw58ZcHRoA9sZqPyIhAF6ELwZjz0C8T4awcO6A/edit?usp=sharing
- IFF/OR?
- Recurring events - ability to make an ifflist repeat every day/week/whatever
- Sticky ifflist - one list that's "sticky" and always on top