diff --git a/templates/show_list.html b/templates/show_list.html
new file mode 100644
index 0000000..76ca981
--- /dev/null
+++ b/templates/show_list.html
@@ -0,0 +1,23 @@
+
+
Todo List
+
+{% block body %}
+
+
+
+{% endblock %}
diff --git a/to_do.py b/to_do.py
new file mode 100644
index 0000000..4e53742
--- /dev/null
+++ b/to_do.py
@@ -0,0 +1,65 @@
+import sqlite3
+from contextlib import closing
+from flask import Flask, request, session, g, redirect, url_for, \
+ abort, render_template, flash
+
+DATABASE = '/tmp/flaskr.db'
+DEBUG = True
+SECRET_KEY = 'development key'
+USERNAME = 'joel'
+PASSWORD = 'password'
+
+app = Flask(__name__)
+app.config.from_object(__name__)
+
+
+def connect_db():
+ return sqlite3.connect(app.config['DATABASE'])
+
+
+def init_db():
+ with closing(connect_db()) as db:
+ with app.open_resource('todo_schema.sql', mode='r') as f:
+ db.cursor().executescript(f.read())
+ db.commit()
+
+
+@app.before_request
+def before_request():
+ g.db = connect_db()
+
+
+@app.teardown_request
+def teardown_request(exception):
+ db = getattr(g, 'db', None)
+ if db is not None:
+ db.close()
+
+
+@app.route('/')
+def show_list():
+ cur = g.db.execute('select id, task from entries order by id desc')
+ entries = [(row[0], row[1]) for row in cur.fetchall()]
+ return render_template('show_list.html', entries=entries)
+
+
+@app.route('/add', methods=['POST'])
+def add_task():
+ g.db.execute('insert into entries (task) values (?)', [request.form['new_task']])
+ g.db.commit()
+ flash('New task added to the list')
+ return redirect(url_for('show_list'))
+
+
+@app.route('/delete', methods=['POST'])
+def remove_task():
+ for checked in request.form.getlist('selected'):
+ g.db.execute('delete from entries where id = ?', checked)
+ g.db.commit()
+ flash('Selected tasks have been removed')
+ return redirect(url_for('show_list'))
+
+
+
+if __name__ == '__main__':
+ app.run()
diff --git a/todo_schema.sql b/todo_schema.sql
new file mode 100644
index 0000000..a802711
--- /dev/null
+++ b/todo_schema.sql
@@ -0,0 +1,5 @@
+drop table if exists entries;
+create table entries (
+ id integer primary key autoincrement,
+ task text
+);