Browse Source

init commit -- 1.0,prod

jordyn 2 years ago
commit
87c01b3310
100 changed files with 3644 additions and 0 deletions
  1. 2 0
      .gitignore
  2. 7 0
      Dockerfile
  3. 21 0
      TODO.org
  4. 13 0
      app.yaml
  5. 3 0
      app/__init__.py
  6. 108 0
      app/atci90d.py
  7. 20 0
      app/templates/base_template.html
  8. 90 0
      app/templates/faq.html
  9. 55 0
      app/templates/glossary.html
  10. 33 0
      app/templates/highlights.html
  11. 9 0
      app/templates/home.html
  12. 68 0
      app/templates/introduction.html
  13. 36 0
      app/templates/map.html
  14. 94 0
      app/templates/random.html
  15. 112 0
      app/templates/stops.html
  16. 17 0
      app/templates/stops/aberdeen.html
  17. 4 0
      app/templates/stops/albion.html
  18. 22 0
      app/templates/stops/astoria.html
  19. 6 0
      app/templates/stops/baker.html
  20. 9 0
      app/templates/stops/bakercity.html
  21. 7 0
      app/templates/stops/benson.html
  22. 10 0
      app/templates/stops/billings.html
  23. 20 0
      app/templates/stops/bowman.html
  24. 26 0
      app/templates/stops/bozeman.html
  25. 38 0
      app/templates/stops/cambridge.html
  26. 26 0
      app/templates/stops/chicago.html
  27. 2 0
      app/templates/stops/columbus.html
  28. 14 0
      app/templates/stops/corvallis.html
  29. 15 0
      app/templates/stops/custer.html
  30. 14 0
      app/templates/stops/darby.html
  31. 36 0
      app/templates/stops/dillon.html
  32. 4 0
      app/templates/stops/durand.html
  33. 1 0
      app/templates/stops/eauclaire.html
  34. 26 0
      app/templates/stops/eugene.html
  35. 6 0
      app/templates/stops/greenville.html
  36. 5 0
      app/templates/stops/hamilton.html
  37. 14 0
      app/templates/stops/kooskia.html
  38. 8 0
      app/templates/stops/lansing.html
  39. 22 0
      app/templates/stops/livingston.html
  40. 4 0
      app/templates/stops/lolo.html
  41. 9 0
      app/templates/stops/london.html
  42. 12 0
      app/templates/stops/madison.html
  43. 2 0
      app/templates/stops/menomonie.html
  44. 11 0
      app/templates/stops/milescity.html
  45. 15 0
      app/templates/stops/millston.html
  46. 14 0
      app/templates/stops/milwaukee.html
  47. 7 0
      app/templates/stops/missoula.html
  48. 16 0
      app/templates/stops/mitchell.html
  49. 17 0
      app/templates/stops/mobridge.html
  50. 14 0
      app/templates/stops/montesano.html
  51. 21 0
      app/templates/stops/muskegon.html
  52. 3 0
      app/templates/stops/newmeadows.html
  53. 8 0
      app/templates/stops/newyork.html
  54. 3 0
      app/templates/stops/niagarafalls.html
  55. 3 0
      app/templates/stops/porthuron.html
  56. 7 0
      app/templates/stops/portland.html
  57. 6 0
      app/templates/stops/portorchard.html
  58. 5 0
      app/templates/stops/prineville.html
  59. 22 0
      app/templates/stops/richland.html
  60. 14 0
      app/templates/stops/rochester.html
  61. 7 0
      app/templates/stops/salem.html
  62. 20 0
      app/templates/stops/sarnia.html
  63. 4 0
      app/templates/stops/schenectady.html
  64. 7 0
      app/templates/stops/seattle.html
  65. 6 0
      app/templates/stops/selby.html
  66. 14 0
      app/templates/stops/shelton.html
  67. 31 0
      app/templates/stops/sisters.html
  68. 51 0
      app/templates/stops/southbend.html
  69. 5 0
      app/templates/stops/stcloud.html
  70. 2 0
      app/templates/stops/stpaul.html
  71. 10 0
      app/templates/stops/toronto.html
  72. 7 0
      app/templates/stops/utica.html
  73. 29 0
      app/templates/stops/waterloo.html
  74. 4 0
      app/templates/stops/waubay.html
  75. 2 0
      app/templates/stops/weedsport.html
  76. 9 0
      app/templates/stops/whitebird.html
  77. 15 0
      app/templates/stops/whitehall.html
  78. 2 0
      app/templates/stops/wisconsindells.html
  79. 8 0
      app/templates/stops/wisdom.html
  80. 47 0
      app/templates/stops/woodheadpark.html
  81. 93 0
      app/templates/town.html
  82. 9 0
      ed_img.sh
  83. 20 0
      lat_long.py
  84. 1588 0
      lats_lons.txt
  85. 1 0
      main.py
  86. BIN
      main.pyc
  87. 9 0
      mv_img.sh
  88. 9 0
      open_img.sh
  89. 12 0
      prestart.sh
  90. 2 0
      requirements.txt
  91. 6 0
      start.sh
  92. 31 0
      static/faq.css
  93. 24 0
      static/glossary.css
  94. 29 0
      static/highlights.css
  95. 57 0
      static/home.css
  96. BIN
      static/js/.map.js.swp
  97. 32 0
      static/js/lazy.js
  98. 72 0
      static/js/map.js
  99. 35 0
      static/map.css
  100. 99 0
      static/stops.css

+ 2 - 0
.gitignore

@@ -0,0 +1,2 @@
+venv/
+__pycache__/

+ 7 - 0
Dockerfile

@@ -0,0 +1,7 @@
+FROM tiangolo/uwsgi-nginx-flask:python3.9
+ENV STATIC_URL /static
+ENV STATIC_PATH /var/www/app/static
+COPY ./requirements.txt /var/www/requirements.txt
+COPY . /app
+COPY static /var/www/app/static/
+RUN pip install -r /var/www/requirements.txt

+ 21 - 0
TODO.org

@@ -0,0 +1,21 @@
+* FEATURES TO IMPLEMENT
+** DONE LAZY LOADING
+- State "DONE"       from "TODO"       [2019-07-12 Fri 16:58]
+** TODO FIX ANCHORS TO STOPS
+*** DONE fix anchors
+- State "DONE"       from "TODO"       [2019-07-12 Fri 17:00]
+*** TODO fix js in leaflet to support clicks
+* STOPS TO EXPOUND ON
+ - corvallis, or
+ - eugene day 2?
+* STORY LINES TO ADD
+ - tabr
+ - bike maps
+* PAGES TO ADD
+ - best dishes
+   - willapa oyster sando
+   - astoria buritto
+   - peggy's pepperoni omelette
+   - pork chop sando
+* STYLE CHANGES
+ - change photo captions to look like imessage bubbles

+ 13 - 0
app.yaml

@@ -0,0 +1,13 @@
+runtime: python27
+api_version: 1
+threadsafe: true
+
+libraries:
+- name: ssl
+  version: latest
+
+handlers:
+- url: /static
+  static_dir: static
+- url: /.*
+  script: main.app

+ 3 - 0
app/__init__.py

@@ -0,0 +1,3 @@
+from flask import Flask
+app = Flask(__name__)
+from app import atci90d

+ 108 - 0
app/atci90d.py

@@ -0,0 +1,108 @@
+from flask import Flask, render_template, request
+import random
+import datetime
+import json
+import os
+import time
+
+from app import app
+
+def _all_stops():
+    with open('lats_lons.txt') as f:
+        towns = json.loads("".join(f.read()))
+
+    start_date = datetime.datetime(2018, 5, 15)
+
+    filtered_towns = []
+    last_town = ""
+    for idx, town in enumerate(towns):
+        town['id'] = town['city'].split(',')[0].replace(' ', '')
+        town['day'] = idx
+        time_diff = datetime.timedelta(idx)
+        date_ = start_date + time_diff
+        town['date_'] = date_.strftime("%b.%d.%Y")
+        if town['city'] != last_town:
+            filtered_towns.append(town)
+        else:
+            if 'visits' in filtered_towns[-1]:
+                filtered_towns[-1]['visits'] += 1
+            else:
+                filtered_towns[-1]['visits'] = 1
+            
+            end_date = start_date + time_diff + datetime.timedelta(filtered_towns[-1]['visits'] - 1)
+            filtered_towns[-1]['final_date'] = end_date.strftime("%b.%d.%Y")
+
+        last_town = town['city']
+        if 'buck' in town and town['buck'] == "stops here":
+            break
+    return filtered_towns
+
+def _get_stops():
+    current_time = datetime.datetime.now()
+    current_year = current_time.year
+    start_day_anniversairy = datetime.datetime(current_year, 5, 15)
+    historical_days_progressed = (current_time - start_day_anniversairy).days 
+
+    stops = _all_stops()
+
+    if historical_days_progressed <= len(stops):
+        limited_towns = [town for town in stops if town['day'] <= historical_days_progressed]
+        return list(reversed(limited_towns))
+    else:
+        return stops
+
+def _is_it_that_time_of_year():
+    (datetime.datetime.now() - datetime.datetime(datetime.datetime.now().year, 5, 15)).days <= 90
+
+@app.route('/')
+def home():
+    return render_template('home.html')
+
+@app.route('/map')
+def map():
+    filtered_towns = _get_stops()
+    try:
+        return render_template('map.html', towns=filtered_towns)
+    except Exception as e:
+        print(e)
+
+@app.route('/random')
+def random_town():
+    towns = _all_stops()
+
+    try:
+        random_town = random.choice(towns)
+        return render_template('random.html', town=random_town)
+    except Exception as e:
+        print(e)
+
+@app.route('/stops')
+def stops():
+    towns = _get_stops()
+    is_historical_period = _is_it_that_time_of_year()
+    try:
+        return render_template('stops.html', args={"towns": towns, "is_historical_period": is_historical_period, "todays_date": time.strftime("%B %d")})
+    except Exception as e:
+        print(e)
+
+@app.route('/faq')
+def faq():
+    return render_template('faq.html')
+
+@app.route('/glossary')
+def glossary():
+    return render_template('glossary.html')
+
+@app.route('/highlights')
+def highlights():
+    img_highlights = os.listdir('static/photos/highlights')
+    img_highlights.sort()
+    first_img = img_highlights[0]
+    others = img_highlights[1:]
+    return render_template('highlights.html', first_img=first_img, imgs=others)
+
+@app.route('/town/<town_name>')
+def town(town_name):
+    towns = _get_stops()
+    town, = (t for t in towns if t['id'] == town_name)
+    return render_template('town.html', town=town)

+ 20 - 0
app/templates/base_template.html

@@ -0,0 +1,20 @@
+<html>
+	<head>
+		<title>{% block title %}My Bike Ride{% endblock %}</title>
+		<link rel="stylesheet" type="text/css" href="/static/style.css">
+		{% block head %}
+		{% endblock %}
+		<link rel="shortcut icon" href="https://img.icons8.com/ios/50/000000/bicycle.png">
+		<!-- Potted Plant icon by Icons8 -->
+	</head>
+	<body>
+		<div id="stops" class="leftnav"><a href="/stops">See the Stops.</a></div>
+		<div id="map" class="leftnav"><a href="/map">See the Map.</a></div>
+		<div id="faq" class="leftnav"><a href="/faq">See the FAQ.</a></div>
+		<div id="hls" class="leftnav"><a href="/highlights">Highlights.</a></div>
+		<div id="gloss" class="leftnav"><a href="/glossary">Glossary.</a></div>
+		<div id="rand" class="leftnav"><a href="/random">Random Stop.</a></div>
+		{% block body %}
+		{% endblock %}
+	</body>
+</html>

+ 90 - 0
app/templates/faq.html

@@ -0,0 +1,90 @@
+
+{% extends "base_template.html" %}
+
+{% block head %}
+
+	  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
+	  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
+	  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
+
+	  <link rel="stylesheet" type="text/css" href="/static/faq.css">
+{% endblock %}
+
+{% block body %}
+<div class="container">
+	<h1>Frequently Asked Questions</h1>
+
+	<h2>Where did you sleep at night?</h2>
+	<p>Whenever I could, I'd opt for a <a href="https://www.warmshowers.org/">Warmshowers</a> host.
+	Warmshowers is an incredible network of volunteers who let Cycle Tourers stay in their house for a
+	night (or a few) and sometimes offer dinner/breakfast, advice, company, stories, etc. Warmshowers
+	hosts are some of the kindest and most generous people in the world and made for some of the most
+	memorable stops on my journey. They host out of a deep passion and care for this community, and on the
+	agreement that it's a karmic arrangement--tourers are encouraged to be hosts sometime in the future,
+	whenever they find themselves in a position to give back to the community. I am inspired by the
+	generosity of my hosts--inspired to help other cyclists in the future.</p>
+	<p>If a Warmshowers was unavailable (and they can be available in the most remote and surprising of
+	places), my next best option was a hostel, which was a reliable option in medium and large cities, and
+	sometimes in unexpected towns, like Mitchell, OR, and Muskegon, MI.</p>
+	<p>If I had to, or if the right opportunity presented itself, I'd camp. I carried a tent etc. but this
+	was really a last resort. I am not a big camper.  Motels were a reliable standby for a hot shower and
+	safe place for my stuff. Often cheaper than even a campground.  On a small handful of times, I was
+	able to stay with a friend or a friend of a friend.</p>
+
+	<h2>Did you ever get any flat tires?</h2>
+	<p>Yes. Many.</p>
+
+	<h2>Were you ever concerned for your safety?</h2>
+	<p>Only around cars. Many people think there are predatory individuals lurking around waiting to stab
+	me and take my... bike bags? Petty cash? People were usually kind, but always respectful.</p>
+
+	<h2>Did you get a super fancy bike?</h2>
+	<p>NOPE. $200 Craigslist Clunker from the 80's. A Nishiki. Solid steel frame. Served my needs
+	perfectly. I named her Nishi. More than one old dude stopped me to talk about my bike, in particular,
+	the lugged frame.  Something rather impressive, I guess, although I didn't even know what that was
+	until one of those old dudes explained it to me.</p>
+
+	<h2>What did you eat?</h2>
+	<p>Tortillas and peanut butter. Carrots and peanut butter. Apples and peanut butter. Peanut butter and
+	peanut butter. Peanut butter is packed with protein and tasty fat and is the great bike super food (in
+	my opinion. Some people swear by donuts or caffeine gels etc.) If I had a Warmshowers host, I'd
+	usually be able to look forward to a great homemade meal. I frequented many small town diners and the
+	near-ubiqitous McDonald's. Nothing beats a couple of McChickens on the side of a road.</p>
+
+	<h2>How many miles did you ride in a day?</h2>
+	<p>0 miles on a good day. 90 miles on a tough day. Averaged around 60, I'd guess. 60 was a comfortable
+	day. 40 was a breeze. 20 was hardly worth packing the bike for.</p>
+
+	<h2>What did you pack?</h2>
+	<ul>
+		<li>Clothes: a few sets of on-bike clothes (not bike clothes, just shorts, t-shirts, many
+			socks, denim vest), a pair of jeans for off-bike activities, hat, etc.</li>
+		<li>Repair equipment: spare tubes, pump, multitool etc.</li>
+		<li>My iPhone</li>
+		<li>A fresh new notebook to record my thoughts--I wrote <em>every</em> day</li>
+		<li>A few days' worth of food: fruit, nuts, granola bars, etc</li>
+		<li>My flute, should I need it. My saxophone was too large for the trip :)</li>
+		<li>Pocket radio, a book, a diskman acquired in OR, a bluetooth speaker acquired in MT, a
+			camera, also acquired in MT</li>
+		<li>Water--lots</li>
+	</ul>
+
+	<h2>Did you bring any entertainment?</h2>
+	<p>Looking to innundate this trip with symbolism, I brought a copy of Homer's Odyssey--befitting my
+	own odyssey. By the time I arrived in NY, I was carrying a half dozen books from various indie
+	bookstores I stumbled across and wanted to support. I also had a pocket radio which was invaluable. In
+	Astoria, OR, I bought a Discman and carried 5 CDs with me. I'd also buy a local paper when available.</p>
+
+	<h2>Who Are You?</h2>
+	<p>Many people have many reasons for knowing me and the only thing you all have in common is that you
+	have somehow found yourself on this website. Some of you are family who have known me since birth and
+	are interested in the antics of a weird relative. Many are friends who have known me or an aspect of
+	myself for years. And many of you I have encountered in one of a thousand situations, perhaps for only
+	a few moments, hours, months.</p>
+	<p>My name is Jordan Dashel. I am a puckish Oregon-born Seattle-native in my early 20s now residing in New
+	York, NY. I've been many things, slipping from one thing to an entirely unrelated other. I am a proudly queer
+	asexual. I have an eccentrically diverse collection of interests, hobbies, occupations, friends and
+	goals. I try to spread joy to the lives of the people I meet, challenging their doubts about the world
+	and what we can do in it. I am always cognizant of the privilege that lets me do so.</p>
+</div>
+{% endblock %}

+ 55 - 0
app/templates/glossary.html

@@ -0,0 +1,55 @@
+{% extends "base_template.html" %}
+
+{% block head %}
+	  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
+	  <link rel="stylesheet" type="text/css" href="/static/glossary.css">
+{% endblock %}
+
+{% block body %}
+<div class="container">
+<h1>Glossary</h1>
+
+<dl>
+
+	<dt>Adventure Cycling Assoc. (n.)</dt>
+	<dd>a nonprofit based in Missoula, MT, that advocates for bicycle tourers</dd>
+
+	<dt>bivy sack (n.)</dt>
+	<dd>also, bivy. A minimal tent for a single sleeper. Enough coverage to lie down and... that's all. I
+	brought it as a lighter alternative to a full blown tent. The size and shape of a sleeping bag. Really
+	just an insulating layer around a sleeping bag</dd>
+
+	<dt>bonk (v.)</dt>
+	<dd>to neglect to eat the right amount at the right time and subsequently run entirely out of enery
+	(usu.) when going up a hill</dd>
+	
+	<dt>lugged bike frame (n.)</dt>
+	<dd>an apparently appealing feature of old bike frames. i was unaware of what this was until it was
+	pointed out to me maybe a dozen times that my bike had it</dd>
+
+	<dt>pork chop sandwich (n.)</dt>
+	<dd>delicious meal invented in Montana</dd>
+
+	<dt>recumbent bike (n.)</dt>
+	<dd>a funky bike; favored by weird old dudes; its use in the TABR is not controversia</dd>
+
+	<dt>tabr (n.)</dt>
+	<dd>an annual race where a bunch of lunatics ride the TransAm trail as fast as they can, carrying
+	little, hardly sleeping, finishing the route in as fast as 16 days</dd>
+	
+	<dt>TransAmerica Bicycle Trail (n.)</dt>
+	<dd>a bike route from Astoria, OR, to Yorktown, VA, developed in 1976 by a bunch of hippies for the
+	"bikecentennial"</dd>
+	
+	<dt>velomobile (n.)</dt>
+	<dd>a funky bike; its use in the TABR is mildly controversial</dd>
+
+	<dt>Wisconsin Dells, the (n.)</dt>
+	<dd>Wisconsin Hells, the</dd>
+
+	<dt>zero day (n.)</dt>
+	<dd>when you put in <em>zero</em> miles for a day; sometimes for rest,
+	sometimes to spend time in a fun place; usu. the former</dd>
+</dl>
+</div>
+{% endblock %}

+ 33 - 0
app/templates/highlights.html

@@ -0,0 +1,33 @@
+{% extends "base_template.html" %}
+
+{% block head %}
+	<!-- Latest compiled and minified CSS -->
+	<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"> -->
+
+	<!-- Optional theme -->
+	<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap-theme.min.css" integrity="sha384-6pzBo3FDv/PJ8r2KRkGHifhEocL+1X2rVCTTkUfGk7/0pbek5mMa1upzvWbrUbOZ" crossorigin="anonymous"> -->
+
+	  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
+	  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
+	  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
+
+	<!-- my css -->
+	<link rel="stylesheet" type="text/css" href="/static/highlights.css">
+	<script src="/static/js/lazy.js"></script>
+
+{% endblock %}
+
+{% block body %}
+<div class="container">
+	<h1>See only the <em>Highest Quality</em> Content</h1>
+
+	<br />
+
+	<!-- work around a lazy load bug,,,im not a fe dev!!! -->
+	<img src="/static/photos/highlights/{{first_img}}">
+
+	{% for image in imgs %}
+		<img class="lazy" data-src="/static/photos/highlights/{{image}}">
+	{% endfor %}
+</div>
+{% endblock %}

+ 9 - 0
app/templates/home.html

@@ -0,0 +1,9 @@
+<html>
+	<link rel="stylesheet" type="text/css" href="/static/home.css">
+
+	<div class="bg">
+		<h1>I rode my bicycle from Seattle to New York.</h1>
+		<a href="/stops"><h2 id="days"><span>Over 90 days</span></h2></a>
+		<a href="/map"><h2 id="journey"><span>See the ride</span></h2></a>
+	</div>
+</html>

+ 68 - 0
app/templates/introduction.html

@@ -0,0 +1,68 @@
+<p>On May 15, 2018, I sat astride my bike and thought it might be a good idea to ride it from Seattle
+to New York.</p>
+<p>Starting today, one year later on May 15, 2019, and continuing through the 90 days I
+took to finish, I'll be posting a more or less daily one-year retrospective. Each day, I'll pull
+some photos, writings from my journal, and other thoughts from where I was on that day one year ago,
+to try and set a comprehensive record of this crazy trip. I encourage you to follow along and track my
+progress! The <a href="/map">map</a> and this page will update in real time, one year removed.</p>
+
+<h3>Why this journey?</h3>
+
+<p>I was asked this question many times and I gave many different answers. But essentially:</p>
+
+<ul>
+	<li>
+		I had never really left home before, and Seattle has been my home for so long. 
+		It was time for me to leave, due to my own restless desire for adventure and
+		personal growth, but also because Seattle was rapidly changing into a city I didn't
+		recognize or see myself comfortably living in. Many friends of mine had left. The
+		time had come for me to leave as well.
+	</li>
+
+	<li>
+		Why on a bike? I felt I needed a stronger transition between these two chapters of my
+		life than just getting on an airplane. I got the idea for this after picking up a Zine
+		by <a href="http://urbanadventureleague.storenvy.com/">Shawn Granton</a> out of PDX
+		about Cycle Touring, and I thought to myself, "I could do that." And the second I
+		thought that I <em>could</em>, I knew I'd regret <em>not</em> doing it.
+	</li>
+
+	<li>
+		I thought that if I told people that I'd ride my bike across the country, and then I
+		did it, people would get the idea that I am a man of my convictions.
+	</li>
+
+	<li>
+		I thought it might be fun.
+	</li>
+
+	<li>
+		I had never actually gotten a driver's licence, so driving wasn't an option. This
+		seems to be the logical alternative?
+	</li>
+</ul>
+
+<h3>Why this website?</h3>
+
+<p>First and most important, I am making this document of my trip to thank the people who supported me
+when I was at my most vulnerable. Countless friendly strangers (and one strange friend) gave me a
+place to sleep, good advice, water, food, gear, and encouragement--I am in their debt. I owe so many
+people so much; this is the smallest token of that gratitude. Many people who supported me are
+themselves accomplished tourers who enjoy living vicariously through those they support. I unwittingly
+stumbled into such a vibrant, diverse, and joyful community--I want to share this accomplishment with
+them.</p>
+
+<p>Additionally--doing this sort of thing, riding a bicycle over 3,000 miles with essentially nothing
+and no clear plan is extremely out of character for me as a person. Consequently, a good portion of my
+friends and acquaintances have severe doubts that any of this actually happened. So I'd like to have
+some irrefutable and exhaustive proof that yes, I did in fact ride my bicycle over 3,000 miles with
+essentially nothing and no clear plan.</p>
+
+<h3>Want some more info?</h3>
+
+<p>Check out my <a href='/faq'>FAQ</a> page for some of the details, logistics, and other minutia that
+people wonder about. Take a look at <a href="https://www.adventurecycling.org/">Adventure Cycling</a>, 
+a nonprofit out of Missoula, MT, devoted to helping Cycle Tourers of all stripes. The original Instagram 
+that I used to roughly document my days and continued well-being (of particular interest to my mom) is 
+<a href="https://www.instagram.com/jo_dshl/">here</a>. Maybe have a peek at my website, <a
+   href="http://jordandashel.com/">jordandashel.com</a>. Thank you for your support!</p>

+ 36 - 0
app/templates/map.html

@@ -0,0 +1,36 @@
+{% extends "base_template.html" %}
+
+{% block head %}
+	<!-- my css -->
+	<link rel="stylesheet" type="text/css" href="/static/map.css">
+
+	<!-- leaflet css -->
+	<link rel="stylesheet" href="https://unpkg.com/leaflet@1.4.0/dist/leaflet.css"
+	       integrity="sha512-puBpdR0798OZvTTbP4A8Ix/l+A4dHDD0DGqYW6RQ+9jxkRFclaxxQb/SJAWZfWAkuyeQUytO7+7N4QKrDh+drA=="
+	crossorigin=""/>
+
+	<script src='https://api.mapbox.com/mapbox-gl-js/v2.1.1/mapbox-gl.js'></script>
+	<link href='https://api.mapbox.com/mapbox-gl-js/v2.1.1/mapbox-gl.css' rel='stylesheet' />
+
+	<!-- leaflet js -->
+	<script src="https://unpkg.com/leaflet@1.4.0/dist/leaflet.js"
+		integrity="sha512-QVftwZFqvtRNi0ZyCtsznlKSWOStnDORoefr1enyq5mVL4tmKB3S/EnC3rRJcxCPavG10IcrVGSmPh6Qw5lwrg=="
+	crossorigin=""></script>
+{% endblock %}
+
+{% block body %}
+	<div id="mapid">
+	</div>
+
+	<!-- my js -->
+	<script src="/static/js/map.js"></script>
+
+	{% for town in towns %}
+		<script type="text/javascript">addPin("{{town|safe}}")</script>
+	{% endfor %}
+	<script type="text/javascript">
+		resizePins();
+		recenterMap();
+	</script>
+	<div id="mapstops"><a href="stops">See the Stops.</a></div>
+{% endblock %}

+ 94 - 0
app/templates/random.html

@@ -0,0 +1,94 @@
+{% extends "base_template.html" %}
+
+{% block head %}
+	<!-- Latest compiled and minified CSS -->
+	<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"> -->
+
+	<!-- Optional theme -->
+	<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap-theme.min.css" integrity="sha384-6pzBo3FDv/PJ8r2KRkGHifhEocL+1X2rVCTTkUfGk7/0pbek5mMa1upzvWbrUbOZ" crossorigin="anonymous"> -->
+
+	  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
+	  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
+	  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
+
+	<!-- my css -->
+	<link rel="stylesheet" type="text/css" href="/static/stops.css">
+
+{% endblock %}
+
+{% block body %}
+<div class="container">
+	<h1>Random Stop!</h1>
+	<br/>
+	{% if town.visits %}
+	<a name="{{town.id}}">
+		<p class="day-links">Day {{town.day}} thru Day {{town.day + town.visits}} -- {{town.date_}} until {{town.final_date}}</p>
+	</a>
+	{% else %}
+	<a name="{{town.id}}">
+		<p class="day-links">Day {{town.day}} -- {{town.date_}}</p>
+	</a>
+	{% endif %}
+	<div class="town">
+	{% if town.visits %}
+		<h1>{{town.city}}. x{{town.visits + 1}}</h1>
+	{% else %}
+		<h1>{{town.city}}.</h1>
+	{% endif %}
+
+	{% if town.photos %}
+		{% if town.photos|length == 1 %}
+			<img src="/static/photos/{{ town.photos[0].filename }}" class="townphoto solophoto">
+		{% else %}
+			<div id="{{town.id}}-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
+				<!-- Indicators -->
+				<ol class="carousel-indicators">
+					{% for i in range(town.photos|length) %}
+						{% if i == 0 %}
+							<li data-target="#{{town.id}}-carousel" data-slide-to="{{i}}" class="active"></li>
+						{% else %}
+							<li data-target="#{{town.id}}-carousel" data-slide-to="{{i}}"></li>
+						{% endif %}
+					{% endfor %}
+				</ol>
+				<div class="carousel-inner">
+				{% for i in range(town.photos|length) %}
+					{% if i == 0 %}
+						<div class="item active">
+							<img src="/static/photos/{{town.photos[i].filename }}" class="townphoto">
+							{% if town.photos[i].comments %}
+								<div class="carousel-caption d-none d-md-block">
+									<p>{{ town.photos[i].comments }}</p>
+								</div>
+							{% endif %}
+						</div>
+					{% else %}
+						<div class="item">
+							<img src="/static/photos/{{town.photos[i].filename }}" class="townphoto" >
+							{% if town.photos[i].comments %}
+								<div class="carousel-caption d-none d-md-block">
+									<p>{{ town.photos[i].comments }}</p>
+								</div>
+							{% endif %}
+						</div>
+					{% endif %}
+				{% endfor %}
+				</div>
+
+				<a class="left carousel-control" href="#{{town.id}}-carousel" data-slide="prev">
+					<span class="glyphicon glyphicon-chevron-left"></span>
+					<span class="sr-only">Previous</span>
+				</a>
+				<a class="right carousel-control" href="#{{town.id}}-carousel" data-slide="next">
+					<span class="glyphicon glyphicon-chevron-right"></span>
+					<span class="sr-only">Next</span>
+				</a>
+			</div>
+		{% endif %}
+	{% endif %}
+
+	{% set city_html = 'stops/' + town.id + '.html' %}
+	{% include city_html ignore missing %}
+	</div>
+</div>
+{% endblock %}

+ 112 - 0
app/templates/stops.html

@@ -0,0 +1,112 @@
+{% extends "base_template.html" %}
+
+{% block head %}
+	<!-- Latest compiled and minified CSS -->
+	<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"> -->
+
+	<!-- Optional theme -->
+	<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap-theme.min.css" integrity="sha384-6pzBo3FDv/PJ8r2KRkGHifhEocL+1X2rVCTTkUfGk7/0pbek5mMa1upzvWbrUbOZ" crossorigin="anonymous"> -->
+
+	  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
+	  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
+	  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
+
+	<!-- my css -->
+	<link rel="stylesheet" type="text/css" href="/static/stops.css">
+
+	<!-- lazy loading js -->
+	<script src="/static/js/lazy.js"></script>
+
+{% endblock %}
+
+{% block body %}
+<div class="container">
+	<h1>Across the Country</h1>
+	<h1>in 90 Days:</h1>
+	<h2>A Travelogue of the Quixotic Trip I took on my Bicycle from Seattle to New York</h2>
+
+	{% if args.is_historical_period %}
+		{% include 'introduction.html' %}
+	{% else %}
+		<p> >> YOU ARE VIEWING A <em>REAL TIME</em> HISTORIC REPLAY OF THIS 2018 TRIP << </p>
+		<p> <pre>      Today is: {{ args.todays_date }} </pre></p>
+	{% endif %}
+
+	<br/>
+
+	{% for town in args.towns %}
+		{% if town.visits %}
+		<a name="{{town.id}}">
+			<p class="day-links">Day {{town.day}} thru Day {{town.day + town.visits}} -- {{town.date_}} until {{town.final_date}}</p>
+		</a>
+		{% else %}
+		<a name="{{town.id}}">
+			<p class="day-links">Day {{town.day}} -- {{town.date_}}</p>
+		</a>
+		{% endif %}
+		<div class="town">
+		{% if town.visits %}
+			<h1>{{town.city}}. x{{town.visits + 1}}</h1>
+		{% else %}
+			<h1>{{town.city}}.</h1>
+		{% endif %}
+
+		{% if town.photos %}
+			{% if town.photos|length == 1 %}
+				<img data-src="/static/photos/{{ town.photos[0].filename }}" class="lazy townphoto solophoto">
+			{% else %}
+				<div id="{{town.id}}-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
+					<!-- Indicators -->
+					<ol class="carousel-indicators">
+						{% for i in range(town.photos|length) %}
+							{% if i == 0 %}
+								<li data-target="#{{town.id}}-carousel" data-slide-to="{{i}}" class="active"></li>
+							{% else %}
+								<li data-target="#{{town.id}}-carousel" data-slide-to="{{i}}"></li>
+							{% endif %}
+						{% endfor %}
+					</ol>
+					<div class="carousel-inner">
+					{% for i in range(town.photos|length) %}
+						{% if i == 0 %}
+							<div class="item active">
+								<img data-src="/static/photos/{{
+								town.photos[i].filename }}" class="lazy townphoto">
+								{% if town.photos[i].comments %}
+									<div class="carousel-caption d-none d-md-block">
+										<p>{{ town.photos[i].comments }}</p>
+									</div>
+								{% endif %}
+							</div>
+						{% else %}
+							<div class="item">
+								<img data-src="/static/photos/{{
+								town.photos[i].filename }}" class="lazy townphoto" >
+								{% if town.photos[i].comments %}
+									<div class="carousel-caption d-none d-md-block">
+										<p>{{ town.photos[i].comments }}</p>
+									</div>
+								{% endif %}
+							</div>
+						{% endif %}
+					{% endfor %}
+					</div>
+
+					<a class="left carousel-control" href="#{{town.id}}-carousel" data-slide="prev">
+						<span class="glyphicon glyphicon-chevron-left"></span>
+						<span class="sr-only">Previous</span>
+					</a>
+					<a class="right carousel-control" href="#{{town.id}}-carousel" data-slide="next">
+						<span class="glyphicon glyphicon-chevron-right"></span>
+						<span class="sr-only">Next</span>
+					</a>
+				</div>
+			{% endif %}
+		{% endif %}
+
+		{% set city_html = 'stops/' + town.id + '.html' %}
+		{% include city_html ignore missing %}
+		</div>
+	{% endfor %}
+</div>
+ {% endblock %}

+ 17 - 0
app/templates/stops/aberdeen.html

@@ -0,0 +1,17 @@
+<p>My grandfather is from Aberdeen, SD, and again, by sheer accident, I ended up
+going through Aberdeen. Aberdeen is a bit more exiting than Selby.</p>
+<p>I was inspired on this day to take the time to record how my body was
+feeling. I'll let my journal speak for itself:</p>
+<blockquote>My muscles never ache. My thighs, calves, whatever other muscles in
+my legs, all fine. All of the ache and pain is in my joints. My knees ache so
+much. My elbows are suffering. Aside from that, my butt is so sore. Today, it
+started peeling. My hands have gone numb. Some of my fingers, centered around
+the ring finger of each hand, are constantly tingling. I cannot fully close my
+hands. My grip strength is pathetic. I keep my money and ID etc. in a binder
+clip. I can no longer open the binder clip with my fingers. If I buy something,
+I have to put the clip on the counter and press it down with my palm.
+</blockquote>
+</br>
+<p>In Aberdeen, you can have a magnificent steak dinner for less than ten
+dollars, including, a salad, loaf of bread, baked potato, texas toast etc. I
+felt like a king.</p>

+ 4 - 0
app/templates/stops/albion.html

@@ -0,0 +1,4 @@
+<p>Apparently I stumbled upon the ACA Northern Tier, another established bike
+route, because I was approached by other bikers, though it took me a while to
+realize because they were in plainclothes. If anything, it reinforced that I am
+happy to have forged my own path.</p>

+ 22 - 0
app/templates/stops/astoria.html

@@ -0,0 +1,22 @@
+<p>Astoria was the first goal of mine. I was planning to travel the <a
+href="https://www.adventurecycling.org/routes-and-maps/adventure-cycling-route-network/transamerica-trail/">Trans
+American Bike Route</a>, which starts in Astoria. So this was Step #1. When I reached Astoria, I was finally on 
+the trail. It felt good to get to another state. Made it seem like I had accomplished something.</p>
+<p>The road <em>to</em> Astoria was another bad idea. To get from Washington to Oregon, of course, you have to
+cross the Columbia River. There are a handful of places to do so. I was doing it on the Astoria bridge, a
+4-mile monstrosity with no shoulder. The first stretch of it was perfectly flat but stressful--there's no
+taking a break; there's no wavering when a nonstop stream of cars is flying by inches from my left hand.
+And at the end, the stakes were raised when I was confronted with an aggressively vertical stretch that
+nearly took it out of me, speeding traffic on one side and a hundred foot drop to the water on the other.
+My deeply ingrained Catholicism emerged and I started to pray for my life.</p>
+<p>From my journal:</p>
+<blockquote>...it almost killed me. I literally started saying the Hail Mary over and over to myself.</blockquote>
+<p><i>The Goonies</i> was filmed in Astoria, and the city has a more than passing interest in the film. I
+stopped at the visitor center after surviving that bridge, adrenaline running, and they had Goonies playing on
+loop and the guy told me that bicyclists had just been involved in a fatal accident with a logger truck on
+that bridge, only a week or two ago. Once again, a great story to tell a guy who just biked the bridge.
+Eventually, I'd learn to be more careful, but I still don't think I was ever reckless, even on this terrible
+bridge.</p>
+<p>Eager for music to accompany my trip, I bought a Diskman and a copy of Dylan's "Blonde on Blonde" from a
+store in Astoria called Bach 'n' Rock. The perfectly American album for my American trip. Once again I'll note
+my eagerness to define every aspect of this trip with symbolism and literary meaning.</p>

+ 6 - 0
app/templates/stops/baker.html

@@ -0,0 +1,6 @@
+<p>At this moment, I am far removed from my initial route, the Trans-Am. And at this moment, I am getting
+satisfaction from looking at the Instagrams of people I've met so far who stuck with the Trans-Am--I'm getting
+satisfaction from witnessing the unprecedented weather they're facing, rain and snow and record heat waves. They
+are struggling and I am having a jolly time on this Northern US route I'm making day-by-day.</p>
+<p>For dinner, I was served a salad with fried onion rings on top. I can feel the Great Midwest
+approaching...</p>

+ 9 - 0
app/templates/stops/bakercity.html

@@ -0,0 +1,9 @@
+<p>Tough day. </p>
+<p>Three mountain passes.</p>
+<p>I bent my chain going over the first.</p>
+<p>I bent it back well enough to keep going, and met Sean, another tourer from Seattle, while I fixed it.
+We rode on to Baker City together, over the other two passes.</p>
+<p>Going into Baker city was a 10 mile road at the end of an otherwise tediously long day. The road was
+straight as an arrow, perfectly flat, and a strong wind was blowing against us. It might as well have been 30
+miles. Uphill. We were glad to finally reach our destination. It's always easier to ride with a friend.</p>
+<p>Fire danger today: Moderate</p>

+ 7 - 0
app/templates/stops/benson.html

@@ -0,0 +1,7 @@
+<p>MINNESOTA!!!</p>
+<p>My Mother said Minnesota was the first state that sounded really far
+away.</p>
+<p>The people of Benson were very nice to me. I was shown great hospitality and
+kindness. A man named Mike did me a great favor with only the request that I pay
+it forward. They gave me a camo trucker cap and told me, "Don't forget
+Benson."</p>

+ 10 - 0
app/templates/stops/billings.html

@@ -0,0 +1,10 @@
+<p>Deviating from the Trans-Am has proven to be an excellent decision. I feel better, and even my mother
+noticed that I sound better on the phone.</p> 
+<br>
+<p>I bought a proper camera at a pawn shop that was having a 40% off everything sale.</p>
+<p>I went to a bookstore that was also a coop. Big store, thin selection.</p>
+<p>I went to HuHot Mongolian Grill.</p>
+<p>The Mariners are on TV, beating Boston 6-0. That makes me happy.</p>
+<p>I was given two free pizzas.</p>
+<p>I met a woman named Jordan. I offered one of my pizzas. She turned it down, having just come from a
+wedding.</p>

+ 20 - 0
app/templates/stops/bowman.html

@@ -0,0 +1,20 @@
+<p>The temperature today breached the 90s. I wasn't really bothered. In fact, I hardly noticed. This was
+an oft-repeated question: isn't it too hot to be riding your bike?? Really, I never actually noticed. Even
+sweating it uphill I have a bit of a breeze. More air circulation than I could ask for. And working hard and
+sweating... the heat was never an issue. I NEVER noticed but people would CONTINUE to comment on and ask
+about this.</p>
+<p>I was writing my thoughts in my journal (the source of all these memories and experiences) at the local
+dive and I was approached by the exceptionally outgoing citizens of Bowman, ND. One person asked me how the
+golfing was. ??? What golfing??? He had seen my (bike) glove tan and thought it was a (golf) glove tan. He
+thought I had "Golfer Hand". I showed him that it wasn't golfer hand because I, in fact, had it on both hands,
+not just my left.  An old dude in a veterans cap approached me and asked what I was writing. I told him I was
+recording my thoughts and experiences. He thought for a minute and asked if <em>this</em> was going to be
+recorded, meaning our conversation. I thought for a minute, and said "I suppose so. If it's a notable event,
+I'll write it down." By asking, his question became a self-fulfilling one. Sure enough, I wrote down our
+experience.</p>
+<p>That night, I truly experienced the power of a great Midwest storm. It was the most colossal war in the
+skies I had ever seen. We were at the intersection of two great storms converging and a friendly trucker
+introduced me to the Midwest hobby of "Storm Watchin'"... just as foreign to me as their fondness for "Road
+Trippin'" and "Rabbit Shootin'". But Storm Watchin' is truly a spectacle, better than television. The strength
+and magnitude of these storms as they roll over the great flat expanse of the Midwest, picking up steam and
+shaking the Earth with their strength... truly a humbling hobby. I'd like try it again.</p>

+ 26 - 0
app/templates/stops/bozeman.html

@@ -0,0 +1,26 @@
+<p>I passed a billboard with a depressed woman looking into the shadows:</p>
+<blockquote>Ask me how the gun went off</blockquote>
+<p>Well ok. That's weird. I was intrigued. How <em>did</em> the gun go off? This billboard was not offering
+any answers to this Raymond Chandleresque question. By the time I got much closer, I could see the small text
+in the corner: Sponsored by the Montana Meth Project. ....Oh. I see.</p>
+<p>Bozeman is a wildly gentrified town. There are wine bars next to wine bars across the street from wine
+bars. Talking to locals, the area is well known as among the best in the world for snow sports and hunting.
+Retired or near-retired lawyers and doctors are moving here in droves, building massive properties for
+the outdoors proximity.</p>
+<p>A well-established mood that I have encountered over and over again, through central Oregon, Idaho, and
+now here in Montana is a sharp distaste for Californians... Californians coming with their money, buying up
+land, putting up fences, building secluded houses. The locals feel taken advantage of by rich Californians.
+It's always Californians. They are the bogeymen in the hills here. People love to look in the distance and
+talk about how something or other has been spoiled by Californians.</p>
+<p>It is <strong>exactly</strong> how I would look into the distance and talk about how Seattle has been
+spoiled by Amazon tech bros.</p>
+</br>
+<p>I was eating lunch and a group noticed the patches and buttons on my vest. An old woman in the group asked
+if I was a boy scout.</p>
+</br>
+<p>I went into a local bookstore and found a book of Robert Frost's poetry. Inside was a poem with 2 lines
+that struck me then and stuck with me for the rest of the trip. He writes about how he would like to just
+wonder off in to the woods, with no direction or purpose but to get away. And should anyone come to find him,
+</p>
+<blockquote><em>They would not find me changed from him they knew
+<br>Only more sure of all I thought was true</em></blockquote>

+ 38 - 0
app/templates/stops/cambridge.html

@@ -0,0 +1,38 @@
+<p>So I woke up on the gravel in my <a href="/glossary#bivy">bivy</a>, well rested. I was bitter that I had no
+coffee and no prospects for finding coffee.</p>
+<p>Then this guy who had said "hi" last night came over to talk to me and see what I was up to. I told him,
+and he invited me into his RV for coffee and toast. Seeing as I was eager to be murdered, I happily
+followed.</p>
+<p>Not really. He was very kind and I had a nice morning with him and his wife, drinking coffee and eating
+cinnamon-sugar and butter white bread. They wished me well and warned me about the <em>Mormon
+Crickets</em> on the other side of the pass. As if they were a dangerous hill people in the area.</p>
+<p>Now, how do you respond to a vague warning about Mormon Crickets? There is no good response, I think, and I
+just said, "Oh, yeah ok. Thanks."</p>
+<p>But then I got to the top of the pass and on the descent, I learned what a Mormon Cricket was.</p>
+<p>As I descended, I started to see some bugs on the road, straight chillin. They were in packs of a few to a
+dozen and I thought, "Ah, the famous Mormon Cricket."</p>
+<p>They were big, fat, juicy bugs and I had no problem avoiding them, weaving in and out. Then I'd go a
+quarter mile or so before seeing another patch of them. And so I continued, but the patches got denser and
+thicker as I went on. To the point were I could no longer avoid them--they were teeming by the hundreds,
+thousands! and the surface of the road was out of sight, covered by a thick blanket of these obese bugs. I had
+no choice but to plow over them, feeling them squish as I crunched each one. And they JUMP! As I got close,
+they would JUMP! But they would jump whichever way they were facing, as often towards me as away. And they
+would SMACK into my exposed legs, up onto my arms, even into my face, thousands of these fat nasty bugs at a
+time.</p>
+<p>I closed my eyes, screwed up my face and raised up my legs as far away from these Mormon Crickets as I
+could get, flying down the steep decline, feeling my tires slip back and forth over the bugs.<p>
+<p>I am just grateful that I was going quickly downhill and not slowly uphill in the company of these bugs.
+Apparently they pose a traffic danger. They gather by the thousands on roads during their swarming season and
+trucks smush them into a slick goo that can cause cars to lose control.</p>
+<p>I felt like I was in the midst of Exodus.</p>
+<p>A really lovely <a href=https://en.wikipedia.org/wiki/Mormon_cricket#Swarming>fact</a> about Mormon
+Crickets: they swarm to seek nutrients, protein and salt, but also to avoid the cannibalistic crickets behind
+them in the swarm. If the leaders of the pack do not march forward towards food, they will be eaten by the
+pack behind them.</p>
+<p>Poison is an effective defense because it will kill the bugs and then kill the other bugs that eat the
+poisoned dead.</p>
+<p>Another <a href=https://www.wsj.com/articles/SB124052112850249691#mod=rss_whats_news_us>tactic</a> to keep
+the bugs away: Some farmers play Loud Rock 'n' Roll to deter these infernal creatures.</p>
+<p>In Elco City, NV, they have brought in snow plows to clear the residue of squished Mormon Crickets from the
+road.</p>
+<p>A really lovely bug that I was happy to be acquainted with.</p>

+ 26 - 0
app/templates/stops/chicago.html

@@ -0,0 +1,26 @@
+<p>I loved Chicago. To my mind, Chicago is the city of Obama, David Sedaris,
+the Blues Brothers, Kanye West. It is of course that and much more. I loved
+the feeling and mood of this big old city. The Chicago Art Institute is one of
+the best museums I've seen, with easily the greatest Modern Art collection I've
+ever seen. They had an embarrassment of Picassos. Almost too much if I'm being
+honest. Their surrealist pieces were especially strong, with some of Magritte's
+greatest work.</p>
+<p>I went to the Green Mill, a famous jazz club that was a favorite haunt of Al
+Capone. I saw the exact booth he liked to sit in -- his back would not have been
+exposed and it was near the exit.</p>
+<p>From my journal (after spending time in a beautiful Chicago library):</p>
+<blockquote>
+	Public libraries in major American cities attract the world's
+	preeminent thinkers on &amp; practitioners of weirdness. These are the
+	elite laboratories for challenging acceptable societal norms &amp;
+	behaviors.
+</blockquote>
+<p>I went to the Pitchfork Music Festival (lucky timing) because
+Courtney Barnett was on the billing. I managed to sneak into a talk she had much
+earlier in the day with a P4K editor. I managed to be at the absolute front of
+her stage when she went on to perform (only a couple hours of waiting in place).
+Her latest album came out days after I started my journey and that CD is one of
+the 5 I carried. It was great to see her... yet again. Always a great
+performer</p>
+<p>Chicago was fantastic. Yet another Midwest city that I could see myself
+living in.</p>

+ 2 - 0
app/templates/stops/columbus.html

@@ -0,0 +1,2 @@
+<p>In Columbus, MT., a woman old enough to be my grandmother drunkenly tried to sit on my lap and then asked
+me if I knew Bob Seger.</p>

+ 14 - 0
app/templates/stops/corvallis.html

@@ -0,0 +1,14 @@
+<p>Corvallis is the town where my mother went to college. It was kind of fun to hang around the town where my
+mother was when she was my age.</p>
+<p>This is the moment in the journey where I start to have big-picture realizations about myself and the trip.
+This is the moment when I start to learn the lessons this journey had to teach me.</p>
+<p>From my journal:</p>
+<blockquote>[I rode] Old Corvallis road, which wound through farm country. It was pretty, of course, but all of
+this scenery is starting to blur together.</blockquote>
+<blockquote>This [ride] is a once-in-a-lifetime experience for me, and by that, I mean I only ever want to do
+it once in my lifetime. It's a tool of exploration and self-discovery which I am leveraging at an age
+when I can. It's a means to an end.</blockquote>
+<p>By this point, I am well aware that I am not riding my bicycle for the simple pleasure of riding a bicycle.
+There are people who are this way (hello, Wilsons!! Thank you :)) but I am not one. I am on this trip to
+challenge myself. To meet people and see new things and learn what I can and can't do. This is the moment of
+the trip when I started to become philosophical about it.</p>

+ 15 - 0
app/templates/stops/custer.html

@@ -0,0 +1,15 @@
+<p>In Custer, MT, a "<a href="https://en.wikipedia.org/wiki/Census-designated_place">Census-designated
+place</a> in Montana" (a CDP i.e. not even big enough to qualify as a township), I spent one dollar to
+hear Prince's "Kiss" on the jukebox at the town's restaurant/motel/bar (the facility combination due not to
+extravagance but rather the exact opposite). I watched as one Montana tough guy turned to another: "Now whas
+that?" The other said "Ah yeh thas Prince from Back in th' day." The other nodded: "Mmmm" and took a long
+drink.</p>
+<p>The name of this tiny and insignificant town comes from General Custer who lost the Battle of Little
+Bighorn nearby.</p>
+<p>On the way, I stopped to visit the top of Pompey's Pillar, a local landmark for Lewis &amp; Clark. One
+thing that really struck me in this region is how OBSESSED locals are with Lewis &amp; Clark. They love them!!
+They are rock stars to the people who live here. Montanans cannot get enough of good ol' L&amp;C, reading
+books, reading their notes, reading novelizations of their notes. Signs explaining that L&amp;C might have been
+here maybe for a day litter the sides of the local highways. People talk about them all the time in great
+reverence.. "oh you know Lewis and Clark probably ate the bark of this tree to survive." And then they would eat
+that same tree bark because they thought that was pretty cool.</p>

+ 14 - 0
app/templates/stops/darby.html

@@ -0,0 +1,14 @@
+<p>A beautiful conversation I overheard while eating in Darby:</p>
+<blockquote>
+	Guy 1: ...they made a grammatical error and..
+	<br/>
+	Guy 2: What's that?
+	<br/>
+	Guy 1: What's what?
+	<br/>
+	Guy 2: What's a grammatical error?
+	<br/>
+	Guy 1: Oh... uh, the words were wrong.
+	<br/>
+	Guy 2: Mm ok.
+</blockquote>

+ 36 - 0
app/templates/stops/dillon.html

@@ -0,0 +1,36 @@
+<p>Dillon was the pivotal crossroads of the entire journey.</p>
+
+<p>Up to now, since Astoria, OR, I had been closely following the Trans Am Bike Trail. Dillon was a day and a
+half away from Yellowstone, the next milestone on the route. </p>
+
+<p>Bad weather had chased me into Dillon. Just as I began the monumental descent, the clouds broke and doused
+me with the most torrential rain I have ever ridden in. No visibility; no traction; completely soaked and
+uncomfortable. There was nothing I could do but put on my rain jacket--a joke in the face of these rains--and
+put my head down and pedal into Dillon. My Warmshowers hosts, Larry and Lori, were the kindest, most
+knowledgeable, and friendly people I could hope for.</p>
+
+<p>They took me in, fed me, let me shower, and gave me a room in the smaller house next to their bigger house,
+which they had built themselves.</p>
+
+<p>Larry was keeping a close eye on the weather radar, tracking the rains that had pummeled me and were
+currently roiling Yellowstone. Yellowstone, my next destination, was flooding under unprecedented conditions.
+I was stuck. So I waited it out.</p>
+
+<p>And yet Mother nature wins the battle of patience. I sheltered in place at my Warmshowers (at my hosts'
+great generosity) and the rain was not passing. It looked like I might get a small window of one clear day,
+but the forecast changed to a week or more of untenable weather.</p>
+
+<p>I felt I had no choice. "If only I could go around," I mused out loud. Larry looked at me, "Well of course
+you can go around!"</p>
+
+<p>My bike maps were tightly dictated. They spelled out the route, and only the route. Few to no alternatives.
+But Larry pulled out a plain old road map and showed me other, better ways. I love it. Great. Sign me up.</p>
+
+<p>And while while I'm at it, there's a better route around another obstacle down the road... and another...
+and another. There is a wealth of better scenery to go through and better roads to travel on. I hadn't
+realized it, but I had been trapped by my maps. I was traveling this famous, allegedly great trail across
+America. It didn't occur to me until then that I could, or even should, forge my own trail across America.</p>
+
+<p>This was the great breakthrough. I was following these maps because they were a lifeline, telling me
+exactly where to go and where I could stop. But at this point I had followed the lines for a full quarter of
+the way across the country. I got a good idea of what the deal was and now I was free to make my own way.</p>

+ 4 - 0
app/templates/stops/durand.html

@@ -0,0 +1,4 @@
+<p>At this point, I'm looking back and forward. I predict in my notebook that
+there are 2 weeks left on the road, a prediction close--but short by 2 days. I am wondering
+if this was actually the best route for me, or if I should have stuck to the
+Trans-Am. My feeling then and now is that I did make the right choices.</p>

+ 1 - 0
app/templates/stops/eauclaire.html

@@ -0,0 +1 @@
+<p>Had to take a <a href="/glossary">Zero Day</a> in Eau Claire</p>

+ 26 - 0
app/templates/stops/eugene.html

@@ -0,0 +1,26 @@
+<p>The first half of this day had easily the worst conditions of the trip. Having left beautiful
+Corvallis, there was a lengthy stretch through the Willamette Valley before I would come to another town with
+any services. And there was a gnarly headwind, making things tough.</p>
+<p>The thing about headwinds is that they sap your energy, both physical and mental. And there is no reward
+for the difficulty. At least when struggling to go uphill, there might be a nice view and breezy downhill
+descent. With a headwind, there's no reward for the suffering. You just get to work extra hard to go extra
+slow.</p>
+<p>So if that wasn't enough, my allergies kicked in with full force and no warning. Suddenly I'm pushing against
+this headwind and</p>
+<blockquote>My eyes were so dry and also shedding endless tears. My nose was unbearably stuffed and also
+running. And of course I didn't have kleenex or anything, so I had to <b>[redacted due to graphic and
+unpleasant description]</b>.
+</blockquote>
+<p>I would have died for some antihistamines. My nose has never been so raw and sore. But the next pharmacy
+wasn't going to be for another 20 miles--20 miles of futile pedaling against stiff and unrelenting winds.
+I stopped at several houses (really more like farm houses out here) asking for something ... anything! but no
+luck.</p>
+<p>The worst part was the sneezing fits. I was sneezing uncontrollably over and over and over
+while trying to ride a bicycle. I would sneeze, the bike would swerve and just as I'd correct course, another
+sneeze was throwing me askew again. This was one of a handful of situations that I'd like to be able to watch
+on a video. It was so silly! Panting and mouth breathing through the Oregon countryside, sneezing so hard I
+almost fell off my bike!</p>
+<p>But it did nothing to diminish my spirits. I did eventually find a pharmacy, stumbling in looking like I've
+got the consumption. From my journal:</p>
+<blockquote>Looking back, it wasn't <u>that</u> bad. That's been a pattern. I'll be miserable and suffering,
+	but in hindsight, the experience mellows out.</blockquote>

+ 6 - 0
app/templates/stops/greenville.html

@@ -0,0 +1,6 @@
+<p>I met kind bikers on the trail who bought me lunch and stayed with generous
+hosts at night with impeccable hospitality and interesting stories. These sort of
+encounters would have blown me away a couple months ago. I would have been in
+awe, grateful and embarrassed, but at this point... it's almost commonplace. I
+never took it for granted, but it has become routine. Almost mundane.
+Interesting thoughts that I don't care to unpack and analyze here.</p>

+ 5 - 0
app/templates/stops/hamilton.html

@@ -0,0 +1,5 @@
+<p>A Hamiltonian told me Hamilton is to Toronto as Brooklyn is to Manhattan. I
+think this is true.</p>
+<p>I had the most AMAZING stay at a Warmshowers in Hamilton. So good, I couldn't
+resist staying another day. I almost won a game of Baby Boomer Trivial Pursuit
+with my hosts.</p>

+ 14 - 0
app/templates/stops/kooskia.html

@@ -0,0 +1,14 @@
+<p>Pronounced <em>koos-key</em>.</p>
+<p>I met two people today from the greater Seattle area:</p>
+<p>One guy I met in Grangeville, ID. He told me he had had his head cut open several times to remove a brain
+tumor, showing me the scars and everything. I thought this was an odd conversation topic to bring up within
+minutes of meeting a stranger, but ok. He then told me his favorite thing about living in this area was being
+able to drive his ATV where ever he liked without a helmet. I guess he is eager to have his head opened a
+fourth time?</p>
+<p>The other guy was my Warmshowers host, Jim, the patriarch of a rural family numbering double digits.  I
+really appreciate the values he instills in his family and the guests from abroad who live with him. They live
+close to the Earth with respect for the world and others in it. He fired up the sauna he  built himself on his
+property and we did that for a while. He runs a gun parts company for a living and lives a 2nd Amendment
+lifestyle. I had never shot a gun in my life, being a Seattle Snowflake, so I expressed interest and he
+showed me how to safely handle a gun. I had the opportunity to shoot both an assault rifle and a hand gun. I
+had respect for the way he respects guns. It was an educational experience.</p>

+ 8 - 0
app/templates/stops/lansing.html

@@ -0,0 +1,8 @@
+<p>From my journal:</p>
+<blockquote>
+	Michigan feels like living on the moon after they figured out the
+	biodome and long after it has lost its luster, like when living on the
+	moon is about on interesting as living in Oregon.
+</blockquote>
+
+<p>Another great host: Emily, a state politics journalist. Thanks!!</p>

+ 22 - 0
app/templates/stops/livingston.html

@@ -0,0 +1,22 @@
+<p>Before even leaving town, I was encountering rain, sun, I thought that I was going through it all, but
+little did I know... Not far down the highway, I began to feel the</p>
+<p>HAIL</p>
+<p>It was too dangerous to ride, this hail was the size of ice cubes. I always thought "golf ball size hail"
+was an exaggeration, but here it was! Hail the size of GOLF BALLS. And It Hurt!! I ducked under an overpass to
+wait it out. I was joined by several cars that also though this weather was too extreme to drive in. They
+checked in to see if I was ok--"good thing you have a helmet!!" I had never seen such weather in my life. And
+checking the radar (a tip I picked up from Larry in Dillon) I could see that there was to be no relief.</p>
+<p>There seemed to be a break in the weather, so I left the shelter of the overpass to keep going. But this
+was just the start. There was a ferocious storm coming and I saw it in the sky and I saw it on the radar. I
+was traveling along a major highway and there seemed to be no hope in sight: bad storm coming and no place to
+shelter. So I was desperate for a place to take refuge from the storm that I knew was coming. This refuge was
+the Montana Grizzly Encounter, a refuge for grizzly bears, home to a relatively famous grizzly, Brutus, who's
+been in movies and has even been the <a href="https://en.wikipedia.org/wiki/Brutus_(bear)">best man</a> in a
+wedding.</p>
+<p>I sheltered in place--the storm blew over and they had to bring the bears into shelter and the humans
+sheltered in the gift shop. I was there for three hours while I waited for this incredible storm to
+pass--wind, rain, hail, and clouds like I've never seen. So by the time it passed, I set off again for the
+next town, but it was late so I didn't go far before retiring for the day. I went to the theater to see the
+Incredibles 2 in the very cool town of Livingston, MT.</p>
+<br>
+<p>On this evening, my brother's first child, Connor, was born.</p>

+ 4 - 0
app/templates/stops/lolo.html

@@ -0,0 +1,4 @@
+<p>HEEEELLLLOOOOOO MONTANA!!!</p>
+<p>Montana has these white crosses on the side of the road wherever there has been an auto fatality. Some of
+the the poles will have three or four crosses on them. It's an eerie sight. They are shockingly
+frequent.</p>

+ 9 - 0
app/templates/stops/london.html

@@ -0,0 +1,9 @@
+<p>In the morning I ate at Tim Hortons, which I felt was a proper Canadian
+thing to do. I liked the vibe; they played Elvis Costello and Nirvana. I
+notice that I've affected a bit of a breezy and confident air, almost a swagger,
+now that I approach my destination. I feel like the bulk of the trip is behind
+me and now I am just tying up loose ends.</p>
+<p>I ate lunch at a place that was pretty much a woman's kitchen. As in... she
+was pulling things out of various tupperware containers to prepare my meal. She
+made herself a sandwich and ate it while I waited for a check. It was
+fantastic.</p>

+ 12 - 0
app/templates/stops/madison.html

@@ -0,0 +1,12 @@
+<p>Leaving the Dalles, I had a heck of a time getting out, and once I got to the
+road I was planning to take, I was opposed (for the first time) by a sign
+explicitly banning bicycles. The signs were too large, obvious, and numerous to
+claim ignorance. And they forced me down a much more dangerous and miserable
+road. So, the Dalles were the pits, beginning, middle, and end.</p>
+</br>
+<p>But coming into Madison, I caught a lovely free ferry with another biker and
+enjoyed the hills, which I had not had the pleasure of for at least a few flat
+states. Wisconsin looks quite reminiscent of Washington.</p>
+<p>I stayed for a day at the hostel sharing a room with a nut named Charlie who
+was convinced his father was the Buddha. I thoroughly enjoyed State St. in
+downtown Madison. This is a place I'd like to live.</p>

+ 2 - 0
app/templates/stops/menomonie.html

@@ -0,0 +1,2 @@
+<p>WISCONSIN!!!</p>
+<p>At this point, the states are just flying by.</p>

+ 11 - 0
app/templates/stops/milescity.html

@@ -0,0 +1,11 @@
+<p>One of the all-time difficult days. I won't rehash the details, but it was a case of getting within 5 miles
+of my destination, getting a flat, quickly and carelessly replacing the tube, getting another flat, and
+later yet another.</p>
+<p>The day was 85 miles on 100% interstate shoulder which is comparable to uphill riding for stress to the
+body and mind. Additionally, there were many uphill stretches, so like... double uphill.</p>
+<p>It's interesting how, with my bike fully deconstructed on the side of the road, tools strewn about,
+obviously in a moment of distress and crisis, no cars will pull aside to ask if I could use help or a lift.
+A classic good Samaritan story, sans Samaritan. But earlier in the very same day, at a rest stop where I
+was safe, content, and relaxing, parades of people went by asking if I needed help, food, water. At the moment
+when I least need help is when people most often offered it. And in the moments of most dire need, there was
+no one but myself.</p>

+ 15 - 0
app/templates/stops/millston.html

@@ -0,0 +1,15 @@
+<p>The Tour de France has been going on for a little while. I've found that I
+now enjoy watching it on TV. I think I've found a new appreciation for it.</p>
+<p>I spent the night in Millston, an unincorporated township, which I've come to
+learn just means a remarkably small town.</p>
+<p>I spent the evening at the 300 Club, where I ordered a mushroom and swiss
+sandwich. I guess they think "sandwich" means "burger" here because it was just
+a mushroom and swiss burger.</p>
+<p>There was live music, a band that plays both kinds of music: country and
+western. A bunch of old women were square dancing (??? I think??) and so after a
+couple rounds, I got up and joined them, doing the moves with a bunch of
+geriatric women. It was fun.</p>
+<br/>
+<p>Two Harley dudes in Millston were talking to me. I mentioned that I keep a
+journal. They said I should write about them, "two funny old guys I met in
+Millston." So, Gene and Pete, I did write about you.</p>

+ 14 - 0
app/templates/stops/milwaukee.html

@@ -0,0 +1,14 @@
+<p>The entire way from Madison to Milwaukee was on an amazing (tolled?!?!) bike
+trail. Some parts were full of happy people, and some stretches I would go for
+dozen of miles without seeing another human, except for one car that followed me
+and really creeped me out.</p>
+<p>Coming into Milwaukee was rocky. I lost my notebook and shoes from the back
+of my bike.</p>
+<p>But I had a connection here! My friend Mike, who was the other outsider at
+the South Dakota family reunion, had a musician friend who could put me up. So I
+stayed in the gracious company of Matt and Julia and their school age daughter.
+They thought I was arriving on a <em>motorcycle</em> bicycle and so were
+confused by my timeframes (how could it take him 3 hours from there??) but were
+incredibly welcoming. I decided to head to Chicago for a few days while they
+hold my stuff. (Taking the train from Milwaukee because biking through city
+sprawl is the worst.)</p>

+ 7 - 0
app/templates/stops/missoula.html

@@ -0,0 +1,7 @@
+<p>I was told by a Harley Biker not to "chicken out" of this trip or else I'd regret it for the rest of my
+life. This was pretty good motivation</p>
+<p>My kid sister drove over from Spokane, Wash, to hang out with me for a while in Missoula, Mont.</p>
+<p>The NBA Finals had just wrapped up, but we were able to catch the more important TV event of the season:
+Wests vs. Kardashians Family Feud.</p>
+<p>One thing I liked about Missoula is that they had voter registration boxes in places like the movie theater
+and bookstores. Register and Vote!</p>

+ 16 - 0
app/templates/stops/mitchell.html

@@ -0,0 +1,16 @@
+<p>For as conflicted as I was only 2 days ago, making it to Mitchell more than made up for any misgivings I
+had.</p>
+<p>Mitchell is a small town in central OR. Population around 130. It contains Pastor Pat. Pastor Pat is
+one of the kindest people I have ever met. He has a bigger heart than I can fathom.</p>
+<p>Pat runs a hostel specifically for bicyclists because Mitchell is on the route of a big race, the
+<a href="https://transambikerace.com/">TABR</a>. He does it out of the generosity of his heart, having converted a doomed church in a small town
+into a refuge for travelers while taking care of the citizens of his town with more compassion than I have
+seen in anyone. This hostel, the "Spoke'n 4 Hostel" has everything a traveling cyclist could ever want: food,
+repair tools, Amish-handcrafted beds and nun-sewn quilts, two pianos, books and other materials, a straight razor
+shave, massage tools, etc, etc, etc. And it's in exchange for a suggested donation. Just a box in a corner,
+an invitation to pay what makes sense. I was so moved by the positive spirits here that I had to stay for
+another day. I had time to run chores with Pastor Pat around town and hear his unique perspective on the
+world. This was one of the most inspiring stops of my journey.</p>
+<p>From my journal:</p>
+<blockquote>I usually like people who just ride bikes. I usually dislike people who just talk about bikes.
+	People who do both can easily go either way.</blockquote>

+ 17 - 0
app/templates/stops/mobridge.html

@@ -0,0 +1,17 @@
+<p>I was plugging along on US Route 12 when I was about halfway through my day, stopped on the side of the road,
+considering whether or not to turn into a town for lunch. I was trying to gauge if it was a big enough town
+to support a restaurant when my buddy MATT who I have known for YEARS back in SEATTLE pulled up in his car.</p>
+<p>He and his sister and brother-in-law were Road Trippin' to South Dakota (their origin) for an annual family
+reunion. Matt had told them about me and my endeavor, and so as they were driving, Matt's sister, Jolie
+said--"Hey! is that your friend over there??" seeing me parked on the highway shoulder. "Uh.. yes that is my
+friend," says Matt. They pull up and ask me: "Would you like a ride??" I said I would not say no to that and
+Jolie saw the relief in my eyes. We disassembled and loaded my bike into the back, helping me cruise through
+what I later realized would be the most barren and deserted stretch of my entire trip, "West River" South
+Dakota (a racially charged term).</p>
+<p>I thoroughly enjoyed being the resident non-family member at their family reunion. I was given an
+originally gruff greeting by Matt's war vet old man due to a failed joke and miscommunication--he thought I
+was literally a vagrant found on the road, not an old friend. After the confusion, I was given a spot at the
+table and enjoyed spending time with the extended family of a friend of mine. A truly weird and treasured
+experience.</p>
+<p>I enjoyed hanging out with Mike, the brother-in-law and fellow outsider. He set me up with a place to stay
+in Milwaukee for which I was so grateful.</p>

+ 14 - 0
app/templates/stops/montesano.html

@@ -0,0 +1,14 @@
+<p>Made a wrong turn early in the day and ended up 8 miles out of my way in Skokomish. As best as I can
+remember, that was the first and only time I had to backtrack a significant distance due to taking a wrong
+turn. The day was spent on bucolic 2-lane roads twisting through fields of flowers and farmland. I think
+this was the most beautiful region, maybe because I'm a biased Washingtonian or because it was so early in the
+trip, but I do consider this the area with the greatest natural beauty.</p>
+<p>The roads here were all named in the same way. For instance, Matlock Brady Road was a road that went
+between the towns of (shocker!!) Matlock and Brady. I thought that was cute, if a little unimaginative.</p>
+<p>Spent the night in Montesano, a town Kurt Cobain lived in as a child and where grunge band The Melvins are
+from. It got its name from a notably pious settler who wanted to name it Mount Zion. Another settler thought
+that was a little extra so they went with Montesano because it sounded better.</p>
+<p>From my journal:</p>
+<blockquote>Today, I hit my groove. My legs were tired but never exhausted.</blockquote>
+<blockquote>I saw a man with no legs lying on the side of the highway. I didn't know if he was taking a nap or
+dead. I think I would have stopped, but there was a cop there already.</blockquote>

+ 21 - 0
app/templates/stops/muskegon.html

@@ -0,0 +1,21 @@
+<p>Caught a late ferry through Lake Michigan storms. People were getting sick
+and having a terrible time. Made it to Muskegon late at night and found my way
+to the unexpected (but welcome) hostel. As far as I can tell, there are only two
+in the state: Muskegon and Detroit. Regardless, welcome to Michigan. The woman
+who runs the hostel, Faith, stayed up to let me in and then gave me some curry rice.
+Very generous. Faith also gave me a homemade candy bar.</p>
+<p>Crossing the time zone over the lake, arriving so late, and being in such a
+cool spot made it an easy choice to take a <a href="/glossary">Zero Day</a>.</p>
+<p>I was the only one around, and so impressed by the bookshelf, I spent the day
+reading Hemingway's "Old Man and the Sea". Not his best work, but it was an
+important parable for me to read at this time in my life. Sometimes, a book
+meets you just when you need it. This was the case here.</p>
+<p>I was on my way out after 1 day rest, and after a late start (accidentally
+locked up my gloves), I was on my way out. Barely a few miles down the lovely
+paved bike path, I got unexpectedly hit by a car!!! The only collision of the
+entire trip. It was a blind corner for us both, a driveway vs. a bike path.
+Since I am such a defensive rider, she hit only my bags and rear wheel, not me.
+It was such a low speed collision, I could have just kept riding if the hit
+hadn't "taco'd" my rear wheel, causing it to catch, throwing me to the ground. I
+was fine, except for a bruised hip and a shaken feeling. I took my bike to a
+shop just in case and decided to stay put for another day.</p>

+ 3 - 0
app/templates/stops/newmeadows.html

@@ -0,0 +1,3 @@
+<p>I saw a sign out here:</p>
+<blockquote>If you can read this, thank your teacher. If you can read this in English, thank your
+	military.</blockquote>

+ 8 - 0
app/templates/stops/newyork.html

@@ -0,0 +1,8 @@
+<p>The very first thing I did in this city was get a cut and a shave just
+outside Grand Central Station.</p>
+<p>From my journal:</p>
+<blockquote>In New York, I feel like I'm home. It feels like just the right fit.
+	I have a lot to do and learn in this city; I am ready and excited. I am
+	absolutely done with this trip. It doesn't even feel like an achievement
+	right now, just a silly thing I did...but I do not regret doing it in
+	any way.</blockquote>

+ 3 - 0
app/templates/stops/niagarafalls.html

@@ -0,0 +1,3 @@
+<p>Leaving Canada! Enjoyed seeing Niagara Falls from both countries. So Many
+Tourists. It is an amazing thing to see. Inspired some high quality vaudeville
+and brought back memories of watching the Stooges with my Dad.</p>

+ 3 - 0
app/templates/stops/porthuron.html

@@ -0,0 +1,3 @@
+<p>My last stop before crossing the border tomorrow into Canada. Michigan was a
+quick and easy state. At this point, I've got things pretty much figured
+out.</p>

+ 7 - 0
app/templates/stops/portland.html

@@ -0,0 +1,7 @@
+<p>I wasn't planning on stopping in PDX. But I needed new tires. I got them checked out in Astoria, and the
+mechanic guessed they were possibly original to the bike (so, decades old). NOT fit to tour on. But my old bike
+had wheels that are no longer standard, so he didn't have tires to give me, "You'll have to go to Portland
+for that." I've never been one to turn down a visit to PDX.</p>
+<p>I did all the things I love to do in PDX: stayed in my favorite hostel, went to Powell's, Everyday Music,
+Blue Star Donuts, my little sister's favorite falafel place. It was great.</p>
+<p>The new tires? Nice. But I miss my old gumwalls.</p>

+ 6 - 0
app/templates/stops/portorchard.html

@@ -0,0 +1,6 @@
+<p>A perfectly fine first stop. Not very far from Seattle, given that the first day was dominated by the
+process of actually extricating myself from Seattle. A beautiful and emotional ferry ride across the
+Sound to Bremerton (my old man's hometown). I chose to cross the Sound and go South on the Olympic Peninsula side
+in order to avoid the I-5 corridor.</p>
+<p>I spent my evening watching a little league game, although I felt a little weird not
+being a parent or anything.</p>

+ 5 - 0
app/templates/stops/prineville.html

@@ -0,0 +1,5 @@
+<p>Prineville has the best McDonald's I've ever been to.</p>
+<p>From my journal:</p>
+<blockquote>This side of the Cascades is beautifully austere--dry and sparse vegetation with dramatic rock
+	structures cutting through the earth. I could see the mountains I had just crossed looming above at the
+	beginning of the day. By the end, they had faded into the distance.</blockquote>

+ 22 - 0
app/templates/stops/richland.html

@@ -0,0 +1,22 @@
+<p>Only through the grace of God was I able to find a replacement chain. There were no open bike shops in
+town--the only shop was open 3 days a week--and I could not continue to ride with my busted chain. I thought I
+was going to be stranded in Baker City. But after a Sherlockian hunt through the city, chasing down a mystery
+shop and the one that would not be open for many days, I finally came to a new shop, not yet open for business.
+They were still building their furniture, butcher paper over the windows and no signs in sight. But they
+were kind enough to dig through their unpacked boxes of goods to find me a chain. What a godsend.</p>
+<p>This is the first time that I notice the scenery is starting to be...different. It no longer looks like the
+lush greenery of the Great PNW. It looks arid, like a desert. Fields of dried up little shrubs as far as I can
+see.</p>
+<p>I ride through "Hell's Canyon" which sounds like a really terrible place to ride a bicycle, but it was
+actually rather pleasant. I left my new friend in Baker City--he was waiting there to see his girlfriend
+who was driving over to see him. At this point, I'm getting really comfortable with my own company, discussing
+at length in my journal my opinions of the albums I'm listening to, the scenery, my inner dialogue.</p>
+<p>I now see that this is really a sign that I've become...comfortable on the road. It's no longer novelty.
+I've passed the crisis point. I am now just...doing my thing. I am on a mission and I'm putting miles on
+the road, taking it for what it is and enjoying the trip.</p>
+<p>I am very aware that this is my last day in beautiful Oregon. I am VERY ready to be in a new state. I have
+gotten the overwhelming idea of just how loooooong Oregon is. Little did I know how long Montana would
+be...</p>
+<p>From my journal:</p>
+<blockquote>I overheard a bartender refer to a shovel as a "Mexican backhoe"</blockquote>
+<p>....yikes</p>

+ 14 - 0
app/templates/stops/rochester.html

@@ -0,0 +1,14 @@
+<p>Had a broken spoke but got it fixed. A fallen tree blocked the path and I
+climbed over it. At this point, obstacles like this are old hat. Two months ago,
+they would have been my entire day.</p>
+<p>My Dad had connections in Rochester so I checked it out. Went to the bar
+owned by the friend of his friend. Headed to the bathroom first and the handful
+of regular patrons had obviously made a few jokes at my expense while I
+was in the bathroom. I came out and sat at the bar and the keep checked my ID.
+"Washington State, what are you doing here?" I said that I had ridden my bike
+here. At this, he blinks, turns to the other patrons and says, "Shut the f***
+up! Shut the g****** f*** up. This guy has ridden his f****n bike from f****n
+Washington state and you all need to shut up." This profanity laden disbelief
+continued for a while and they were all very impressed, by far more impressed
+than anyone I had encountered so far. It was all very entertaining. One of them
+insisted on signing my bicycle.  </p>

+ 7 - 0
app/templates/stops/salem.html

@@ -0,0 +1,7 @@
+<p>Perhaps my first mundane day.</p>
+<p>The road to Salem lead through mint fields. The scent of mint floated gently on the air, a beautiful
+experience, surreal. I started to hyperventilate trying to experience it fully.</p>
+<p>I met two bicyclists from Quebec on the road. They were touring from Seattle to San Diego.</p>
+<p>I had a great time in Salem. Ate at my older sister's favorite bagel place. My host for the night in Salem
+was absolutely incredible. My gratitude.</p>
+<p>I had a great doppio in Salem at Archive Coffee, on my host's suggestion. It was divine.</p>

+ 20 - 0
app/templates/stops/sarnia.html

@@ -0,0 +1,20 @@
+<p>Crossing the border was exhausting. There was a bridge to cross over the
+water into Ontario (one of three connecting Michigan to Canada). At first I was
+told I'd probably be turned away. Then I was told that it was fine. Then I was
+told to wait. It was all very weird. Eventually an officer drove me over the
+bridge. It all seemed a little unnecessary as there was a perfectly good
+pedestrian path going alongside the length of the bridge, but I was told that
+pedestrians were not allowed to travel it, not since 9/11.</p>
+
+<p>Once IN Canada, border patrol searched my entire bike and all my bags,
+pulling out my food, first aid kit, tent, and everything else, searching it all
+rather thoroughly. It seemed all so weird--searching me, a kid on a bike, so
+diligently and invasively, as countless cars cruised by with barely a glance.
+But apparently I passed muster and they didn't find anything too bad. They did,
+however, confiscate the pepper spray that a lovely woman had given me at the
+Mississippi River for my own protection. But this was fine with me; I didn't
+really like traveling with it anyway but did so out of respect for the gift.</p>
+
+<p>Canada was strange. The first things I noticed were how slippery their money
+is and also that there was a Walmart with a McDonald's in it.</p>
+<p>I spent the rest of the day watching the new Mission Impossible film.</p>

+ 4 - 0
app/templates/stops/schenectady.html

@@ -0,0 +1,4 @@
+<p>Last stop before NYC!!!</p>
+<p>The journey is effectively over. From here, I ship my bike home, get rid of
+the stuff I don't need, and take a train into the city. Yet another helpful and
+kind host.</p>

+ 7 - 0
app/templates/stops/seattle.html

@@ -0,0 +1,7 @@
+<p>The day had been planned for months. I had sold or given away my belongings--records, books, CDs, clothes.
+All I had was what I could pack on my bike and a couple of boxes to be shipped to me when I eventually reached
+New York.<br/> Not sunny, but also not raining. An apt omen. I got ready to go, rode to my bike mechanic--the one
+last person I had not said goodbye to yet. Had a final lunch with a good friend, met my sister for a farewell,
+and set off.</p>
+<p>From my journal: </p>
+<blockquote>Leaving Seattle was weird. None of it seems real.</blockquote>

+ 6 - 0
app/templates/stops/selby.html

@@ -0,0 +1,6 @@
+<p>My grandmother is from Selby, SD, and by sheer accident, I ended up going through Selby. There's not much
+in Selby.</p>
+<p>I scoured both of the cemeteries in town looking for a familiar last name, but no luck.</p>
+<p>Selby doesn't have much other than a decommissioned opera house and Mr. Bob's Drive-Inn. My lunch at Mr.
+Bob's was depressing. A piece of dry chicken on a bun and a "strawberry milkshake" which I guess they took to
+mean a "strawberry smoothie". Not the same. Honestly, I'm not surprised my grandmother skipped town.</p>

+ 14 - 0
app/templates/stops/shelton.html

@@ -0,0 +1,14 @@
+<p>Mason County is gorgeous.</p>
+
+<p> From my journal:</p> 
+
+<blockquote>My body feels sore but not unbearably or unexpectedly so.</blockquote>
+
+
+<blockquote>
+	Towards the end of the day, my legs were suffering, so I pulled over and flopped down on some
+	grass. I lay there for a while, trying to rest, but couldn't shake the uncomfortable sensation
+	of phantom bugs crawling on my skin. I got up and noticed a long-dead and decaying bird
+	exactly where my shoulder had been. It was crawling with the ugliest ants and spiders I've
+	ever seen.
+</blockquote>

+ 31 - 0
app/templates/stops/sisters.html

@@ -0,0 +1,31 @@
+<p>The second most pivotal stop of the trip.</p>
+
+<p>It was to be my first ascent, a climb to an elevation of over 5,000 feet at McKenzie Pass. I was nervous,
+unsure if I was physically prepared for it. My last Warmshowers hosts assured me I was, and yes, I was. I
+struggled up, no doubt, for many hours. The view from the top was stellar. There was a cool castle at the top.
+At this time of year, the road is closed to all cars and open to bikes only on the weekend. Eugene kids seem
+to like to drink and smoke themselves crosseyed and bike up, camp in the castle and ride down the next day. I
+enjoyed the frighteningly brisk descent.</p>
+<p>I camped for the night in Sisters. And I felt <b>done</b>. I was finished. I did not want to continue
+another mile. Not because I was scared, or unsure, or worried, or anything. I was just <b>done</b>. I felt
+that I had seen what I had come to see. I had met great people, rode my bike hundreds of miles and biked my
+way over a freaking MOUNTAIN. What more could there be? I was tired. I was afraid after this point the returns
+would be so diminished that it wouldn't be worth continuing. I could not see the point of continuing.</p>
+<p>I was fully prepared to go home.</p>
+<br/>
+<p>From the beginning, I had a few rules to govern the trip. Most important--and set for this exact
+scenario--were the permissible reasons for throwing in the towel. I didn't want to tell all my friends and
+family that I was going to bike thousands of miles away from home and not even make it out of
+<em>Oregon</em>...  at least not without a good excuse. So there were a handful of reasons that I would accept
+as valid for not continuing. One reason was bike theft. If my bike was stolen, I would not get another. I
+would accept that as a sign that I was not to continue.</p>
+<p>And so I awoke in Sisters before dawn. I wanted nothing less than to put more miles on the road. I wanted
+to go home. Instead, I went to the town's diner. I propped my bike up on a pole and I did not lock it. I stood
+there looking at it intensely, my mind full of conflict and confusion. I set my helmet helpfully on top and
+angled the handlebars out, ready for any enterprising thief to hop on and take off. I repositioned it a few
+times to make it look more appealing. Then I went into the diner, sat with my back to the window and drank
+many cups of coffee.</p>
+<p>I was so ready for my bike to be gone. I would have cried tears of relief if I turned around and saw that
+Nishi was gone--nowhere to be found. I was in that diner for hours. And when the host started refilling my cup
+more and more infrequently, I got up, turned around, and saw that damn bike exactly where I left it. With a
+deep sigh, I went out, got back in the saddle, and headed for the next town.</p>

+ 51 - 0
app/templates/stops/southbend.html

@@ -0,0 +1,51 @@
+<p>This was perhaps one of the worst, best and weirdest days of the trip.</p>
+<p>The first half of the day was fine. Was prepared for a long day, ready to get to Astoria. I kept
+thinking... I just need to get to Astoria. Stopped for lunch in South Bend, right on Willapa Bay, famous for
+their oysters. So I got a fried oyster sandwich--exactly the kind of small town cooking that I was so eager to
+experience. An incredible sandwich. I continued. My maps directed me towards a kind of off-road. I was
+uncertain, but trusted my directions. I followed the road until I came to a sign: "Paving Ends Ahead". The
+sign did not lie. Ahead of me lie a gravel road.</p>
+<p>Being on a road bike, gravel is a surface I would typically wish to avoid. But if this was the fastest way
+to Astoria, it seemed the way I should go. My directions said the road name would change in a mile. So I
+thought... I can handle a mile of gravel. If it doesn't change, I'll turn back. This "road" was one of the
+most difficult of the entire journey. Not only was the coarse gravel tough, the incline was perilously steep.
+It was at times too difficult to bike so I had to get off and push. But I kept going and at some point, I had
+gone so far thinking "there can't be too much more of this" that it eventually became clear there was no
+end in sight. But I had come so far; it would make no sense to go back. So, after 4 miles of treacherous
+uphill gravel and no people, buildings, or civilization to speak of, I get a flat.</p>
+<p>Exhausted and fed up with these conditions, I take my time to unload my stuff and fix the flat, having a
+snack and cursing this dumb idea. This road seems to be the middle of nowhere--no cars coming or going and
+deep forest on both sides of this gravel path. It was actually rather serene. Until I heard a menacing growl
+come from the woods.</p>
+<p>A bear? A mountain lion? Bigfoot? To this day, I do not know if this growl was real or a product of my
+overactive imagination. Regardless, I have never reassembled my bike faster than I did in that moment. I was
+scared witless. Sweating, nervous, and with a racing heart, I pedaled furiously for another 1/4 mile before my
+tire was flat again. I was too rattled to take the time to fix it, so I pushed my bike another few miles
+before I reached the end of this godforsaken road.</p>
+<p>On this exact same day, two bikers in the other Bend--North Bend, WA--were <a href="https://www.washingtonpost.com/news/animalia/wp/2018/05/21/something-was-wrong-with-this-cougar-animal-that-killed-biker-injured-another-was-emaciated/?utm_term=.5f6de1c58f3d">
+mauled and killed</a> by a mountain lion. I am so grateful and aware of how easily it could have been me. Many
+people brought this news item to my attention over the following weeks, which I thought was a weird thing to
+say to someone like me.</p>
+<p>I eventually emerged from the woods, relieved and exhausted but still remote from civilization. I continued
+to push my bike until I was greeted by two locals who were walking their dog. They were sympathetic and
+surprised that I had come from the way I did. They walked me toward the highway.</p>
+<p>I was shaken, but not so shook that I didn't notice the scenery we walked through. This was the most
+beautiful place I have ever been. Full stop. We walked a road cutting through a marsh full of lush greenery,
+as if a sea around us. This sea was interrupted by islands of trees exploding from the surface, too many trees
+to fit on each little island, pushing each other out of the way, bounded and surrounded by the sea of
+low lying plants extending in every direction. I was too awed to even try to capture this scenery in a
+photograph. It looked exactly like a Studio Ghibli creation...  Too beautiful and mystic to be real. This
+impression was compounded by the endorphins rushing through my bloodstream.</p>
+<p>While we were walking through this incredible landscape, the sounds of another come from behind us. ?!?!?
+This place is so remote, these are the first people I've seen in hours, and here is another, but it's not just
+anyone--another bike tourer!! He had followed the same road I had, but with much beefier tires than mine and
+he had a great time. The odds seemed impossible. His name is Jonas. He was also from Seattle, but taking a
+much more leisurely pace than mine, having left Seattle a month ago.</p>
+<p>The folks with the dog offered us their barn as a place to shelter for the night. So we stayed there. Jonas
+showed me how to forage for oyster mushrooms which we cooked up for dinner. Jonas is also a musician, so we
+jammed together, him on a mandolin he was carrying and me on the flute I was carrying. We camped the night
+together. It was great fun.</p>
+<p>My mom said this story seemed too fake to be real, but to be sure, every word of it is true.</p>
+
+<p>From my journal:</p>
+<blockquote>My heart is racing &amp; I'm starting to panic. "This is how it ends," I am sure.</blockquote>

+ 5 - 0
app/templates/stops/stcloud.html

@@ -0,0 +1,5 @@
+<p>I can no longer be the best thing West of the Mississippi. Because I am no longer
+West of the Mississippi.</p>
+<p>I saw a fox eat a bunny rabbit. The roadkill in this area is ... turtles.</p>
+<p>A woman in this area was concerned for my safety and gave me pepper
+spray. I would carry it with me until it was later confiscated at the Canadian border.</p>

+ 2 - 0
app/templates/stops/stpaul.html

@@ -0,0 +1,2 @@
+<p>It's hard to bike out of a city. It's twice as hard to bike out of twin
+cities.</p>

+ 10 - 0
app/templates/stops/toronto.html

@@ -0,0 +1,10 @@
+<p>Whoever it was who went around the world in 80 days... In the same time I
+only made it to Toronto. Lol.</p>
+<p>I had a great time in the 6ix. A woman asked me where my accent was from. I
+watched a guy snort a line of coke off a McDonald's table at 10am. I walked
+Graffiti Alley. I ate poutine. Toronto feels like a different world. A great
+place to run through with my woes.</p>
+<p>I heard later that there is a Canadian saying:</p>
+<blockquote>Canadians hate Ontario; Ontarians hate Toronto; Torontians hate Bay
+St.</blockquote>
+<p>I walked Bay St., so I guess I've seen the absolute pits of Canada.</p>

+ 7 - 0
app/templates/stops/utica.html

@@ -0,0 +1,7 @@
+<p>Passed a sign like:</p>
+<blockquote>
+	<strong>C</strong> omplete</br>
+	<strong>A</strong> uto</br>
+	<strong>R</strong> epair, Inc</br>
+	<strong>S</strong></br>
+</blockquote>

+ 29 - 0
app/templates/stops/waterloo.html

@@ -0,0 +1,29 @@
+<p>I've gotten deep enough into Canada to hear their distinct speech patterns,
+the classic "sorry"s and "eh"s are accurate. I love how they twist their
+vowels.</p>
+
+<p>I had taken this moment to capture some thoughts that I hadn't had a chance
+to write down yet:</p>
+<ul>
+	<li>Back in the boonies of Minnesota, power line poles had signs posted:
+	"Do not climb! High voltage." And I thought to myself, only in a place
+	like this would a sign like that be necessary! Of <em>course</em> these
+	people would try to climb those poles.</li>
+	<li>When I first came into Canada, power line poles had signs posted:
+	"Caution! Look Up! Power Lines Above." And I thought to myself, how tall
+	are these Canadians??</li>
+	<li>Michigan has super lax booze laws. Convenience stores are lined with
+	enormous walls of liquor. Canada is the opposite--alcohol is unavailable
+	in stores. You have to go to a "Beer Store" for beer and I don't even
+	know where they keep the liquor.</li>
+	<li>I passed through a town in Michigan and below the welcome sign was
+	the town's two claims to fame. The second of these was "2010 Girls
+	Bowling Runners Up". What a strange claim to fame... they weren't even
+	the 2010 Girls Bowling champs. Later in the day I went through a town
+	that similarly displayed their accomplishments: "2012 Girls Bowling
+	Champions". Girls Bowling must be unbelievably competitive in
+	Michigan.</li>
+	<li>In Canada, I biked past a sign: "Blind Person Area". I wonder if the
+	blind person is aware that the sign is there. Later I saw a "Deaf Child
+	Area" sign. Canadians are a thoughtful people.</li>
+</ul>

+ 4 - 0
app/templates/stops/waubay.html

@@ -0,0 +1,4 @@
+<p>The wind in South Dakota is gross.</p>
+<p>A wonderful man in Bristol bought me lunch. He was also an adventurer, having
+through-hiked the Appalachian Trail. Meeting him was a little bit of "Trail
+Magic"</p>

+ 2 - 0
app/templates/stops/weedsport.html

@@ -0,0 +1,2 @@
+<p>This feels like the Champs-Élysées stage of my journey--everything is behind
+me and now I'm just cruising to the finish line.</p>

+ 9 - 0
app/templates/stops/whitebird.html

@@ -0,0 +1,9 @@
+<p>Another microscopic town. I lucked into some great lodging, a cabin with a kitchen and everything! So I
+took the opportunity to make some weird burritos with what I could find in the local "grocery" store--the only
+things for sale that <em>wasn't</em> in a can were some onions and a few green apples. There is not an
+abundance of fresh food out here. The only radio reception I could get was a single station with a scratchy
+Native Music thing that turned into a Hip-Hop Hour. Did not think I'd find a Hip-Hop hour in White Bird,
+ID.</p>
+<p>White Bird is named after a Nee Me Poo (Nez Perce) chief who won a resounding defeat at a pivotal battle
+against the US Government in the hills here. Riding those hills out of White Bird was incredible. I passed
+actual, honest-to-god cowboys on horses with hats and doggies rounding up cattle into trucks.</p>

+ 15 - 0
app/templates/stops/whitehall.html

@@ -0,0 +1,15 @@
+<p>I rode most of the day with two new riding partners, a chainsmoking Indian fellow and a geriatric chatterbox
+who were holding strong at last and second-to in the Trans-Am race. They were great company. We eventually
+parted ways as they turned towards Yellowstone and I rode into the depths of Montana, a suspiciously large
+state.</p>
+<p>Rain all day. I had been scared of riding in the rain, but I guess no longer. Amazing how fear evaporates
+in the face of lived experience. However, there was major road construction for some dozen miles going into
+Whitehall. This meant miles of dirt roads. Miles of dirt roads that had been rained on all day. It was
+absolutely filthy. I would have paid any price to clean myself of the dirt and mud caked onto every uncovered
+surface of my body, as well as a number of surfaces that had been covered. And at the end of the day it looked
+I wasn't going to be able to find a shower, but luckily one came through at the last moment at a Holiday
+Inn.</p>
+<p>This was ultimately the last day of life for my Nike sneakers. The mud and wet was too much for them.
+RIP.</p>
+<p>For dinner, I had the region's famous signature dish, a pork chop sandwich, invented in nearby Butte,
+Montana. Ok. Pretty good actually.</p>

+ 2 - 0
app/templates/stops/wisconsindells.html

@@ -0,0 +1,2 @@
+<p>Wisconsin Dells.... more like Wisconsin Hells.</p>
+<p>I have no further comments.</p>

+ 8 - 0
app/templates/stops/wisdom.html

@@ -0,0 +1,8 @@
+<p>Apparently kids are allowed in bars here. This IS NOT the case in Seattle, where there is separate seating
+for minors. This IS the case in most of the country however. I would marvel over this fact in many states to
+the future and people would look at me like "well of COURSE kids are allowed in bars, where else would they
+go?" Hmmm. Life is easier for an alcoholic 6 year old in Montana.<p>
+<p>The reason for this, I learned, is because so many towns are so small that they can't afford to support
+both a bar AND a family establishment, so people bring their kids to the bar. I chewed over this while eating
+a chicken sandwich and watching two prepubescents shoot pool in a smoky bar.</p>
+<p>Reminded me of the scene in <em>Airplane!</em> where two girl scouts beat each other bloody in a GI bar.</p>

+ 47 - 0
app/templates/stops/woodheadpark.html

@@ -0,0 +1,47 @@
+<p>Made it to Idaho!! Easily the most disappointing and pathetic state border sign I've seen.</p>
+<p>I started the morning tired and uninspired. I packed my things and went for breakfast at the local diner.
+They had a house special: Angie's Omelette. The description: olives, pepperoni and cheese. Okay... that is
+weird. I thought it might be one of those so-weird-it's-good things, like bacon maple bars or tahini jelly
+sandwiches, but no. It was just weird. Like pizza for breakfast except it isn't pizza. But it also wasn't
+bad. But I also probably wouldn't eat it again. But I also kinda liked it. This omelette inspired a variety of
+conflicting emotions.</p>
+<p>I'm not feeling energized this morning, but nevertheless I hit the road. First thing is a ridiculous climb
+full of switchbacks and steep inclines. I have my pocket radio lashed to my handlebars for entertainment. And
+out here in the boonies, there are few radio stations to choose from. Reception is not great. But I
+<em>am</em> able to find an NPR station. So I'm trying to listen to NPR, but every few seconds, my already
+tenuous connection to Oregon Public Radio is interrupted by another station on the same band. And so as I
+agonize up this hill, pedaling with all I have in me, my one connection to people and sanity keeps switching
+back and forth between NPR (hot) and a Christian rock radio station (not).</p>
+<blockquote><em>*...we're here today with poet and playwright...and heeeee knowwwws and heeeee lovvvvves...who
+		addresses issues of gender and race in her new...light touches my soul and I
+		knowwwww...controversy when...in his handddddds and I kno...you I would like to say
+		that...everydayyy I rememberrrr....*</em></blockquote>
+<p>Looking back I recognize how objectively funny this scenario is and chuckle over how deeply unfunny it was
+to me at the time</p>
+<br/>
+<p>I had a lovely mid-day. Beautiful riding. Excited to get to the Idaho border. Getting to Idaho was an 8
+mile stretch along the Snake River. I was getting hungry but I thought I would eat in Idaho. And so I kept
+going along, and kept going, and kept going. Telling myself I'd eat in Idaho. And then actually getting over
+the dam was a slog, a stupidly steep hill. And I thought--I'll eat in Idaho. This was a mistake.</p>
+<p>"Bonk" was a word that I had heard among bikers but not understood. Today, I learned.</p>
+<dl>
+	<dt><a href="/glossary#bonk">bonk</a> (v.)</dt>
+	<dd>to neglect to eat the right amount at the right time and subsequently run entirely out of energy
+	(usu.) when going up a hill</dd>
+</dl>
+<p>And I <strong>bonked</strong>.</p>
+<p>There is no easy recovery from a bonk. Most people try to eat as much sugar as quickly as they can. Lunch
+at the top of the dam made the nausea go away, but there was no way I was going to be able to ride my bike any
+further! Especially since a significant mountain pass laid between me and any other point of civilization.</p>
+<p>I was considering my options... I took the next turnoff which just HAPPENED to be a campground (yet another
+godsend) and as I studied my maps, trying to determine how far to the next town (too far), a man approached me
+and asked if I was lost. "No," I said, "just tired." Turns out he was the campmaster, Joe, and he offered me a
+spot, no charge. Great. The spot was a patch of gravel and a picnic table, but sometimes? You count your
+blessings. And really, gravel can be quite comfortable to sleep on actually. I took a shower and enjoyed the
+beautiful scenery around me.</p>
+<p>A little before sunset, I had my things laid out and was milling about. Then a STORM came through, from
+NOWHERE. The wind came from the blue and sent my sleeping bag (still rolled up) flying across the campground.
+I chased it down, looking like one of the three stooges, and tried to grab anything that was loose and secure
+it. Then the rain started. Great, hard, wet rain. I slinked into my <a href="/glossary#bivy">bivy sack</a>, ready to wait out the night and
+the storm. But then 20 minutes later, the rain stopped as suddenly as it had come. So I got out of my sack and
+milled about a bit longer.</p>

+ 93 - 0
app/templates/town.html

@@ -0,0 +1,93 @@
+{% extends "base_template.html" %}
+
+{% block head %}
+	<!-- Latest compiled and minified CSS -->
+	<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"> -->
+
+	<!-- Optional theme -->
+	<!-- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap-theme.min.css" integrity="sha384-6pzBo3FDv/PJ8r2KRkGHifhEocL+1X2rVCTTkUfGk7/0pbek5mMa1upzvWbrUbOZ" crossorigin="anonymous"> -->
+
+	  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/css/bootstrap.min.css">
+	  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js"></script>
+	  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.4.0/js/bootstrap.min.js"></script>
+
+	<!-- my css -->
+	<link rel="stylesheet" type="text/css" href="/static/stops.css">
+
+{% endblock %}
+
+{% block body %}
+<div class="container">
+	<br/>
+	{% if town.visits %}
+	<a name="{{town.id}}">
+		<p class="day-links">Day {{town.day}} thru Day {{town.day + town.visits}} -- {{town.date_}} until {{town.final_date}}</p>
+	</a>
+	{% else %}
+	<a name="{{town.id}}">
+		<p class="day-links">Day {{town.day}} -- {{town.date_}}</p>
+	</a>
+	{% endif %}
+	<div class="town">
+	{% if town.visits %}
+		<h1>{{town.city}}. x{{town.visits + 1}}</h1>
+	{% else %}
+		<h1>{{town.city}}.</h1>
+	{% endif %}
+
+	{% if town.photos %}
+		{% if town.photos|length == 1 %}
+			<img src="/static/photos/{{ town.photos[0].filename }}" class="townphoto solophoto">
+		{% else %}
+			<div id="{{town.id}}-carousel" class="carousel slide" data-ride="carousel" data-interval="false">
+				<!-- Indicators -->
+				<ol class="carousel-indicators">
+					{% for i in range(town.photos|length) %}
+						{% if i == 0 %}
+							<li data-target="#{{town.id}}-carousel" data-slide-to="{{i}}" class="active"></li>
+						{% else %}
+							<li data-target="#{{town.id}}-carousel" data-slide-to="{{i}}"></li>
+						{% endif %}
+					{% endfor %}
+				</ol>
+				<div class="carousel-inner">
+				{% for i in range(town.photos|length) %}
+					{% if i == 0 %}
+						<div class="item active">
+							<img src="/static/photos/{{town.photos[i].filename }}" class="townphoto">
+							{% if town.photos[i].comments %}
+								<div class="carousel-caption d-none d-md-block">
+									<p>{{ town.photos[i].comments }}</p>
+								</div>
+							{% endif %}
+						</div>
+					{% else %}
+						<div class="item">
+							<img src="/static/photos/{{town.photos[i].filename }}" class="townphoto" >
+							{% if town.photos[i].comments %}
+								<div class="carousel-caption d-none d-md-block">
+									<p>{{ town.photos[i].comments }}</p>
+								</div>
+							{% endif %}
+						</div>
+					{% endif %}
+				{% endfor %}
+				</div>
+
+				<a class="left carousel-control" href="#{{town.id}}-carousel" data-slide="prev">
+					<span class="glyphicon glyphicon-chevron-left"></span>
+					<span class="sr-only">Previous</span>
+				</a>
+				<a class="right carousel-control" href="#{{town.id}}-carousel" data-slide="next">
+					<span class="glyphicon glyphicon-chevron-right"></span>
+					<span class="sr-only">Next</span>
+				</a>
+			</div>
+		{% endif %}
+	{% endif %}
+
+	{% set city_html = 'stops/' + town.id + '.html' %}
+	{% include city_html ignore missing %}
+	</div>
+</div>
+{% endblock %}

+ 9 - 0
ed_img.sh

@@ -0,0 +1,9 @@
+#!/bin/bash
+
+for img_num in "$@"; do
+
+	echo "Opening $img_num"
+
+	open static/photos/IMG_${img_num}.jpg
+
+done

+ 20 - 0
lat_long.py

@@ -0,0 +1,20 @@
+from opencage.geocoder import OpenCageGeocode
+import json
+
+key = '59713351589a4d55a9fa1b286191d47b'
+geocoder = OpenCageGeocode(key)
+towns = []
+
+with open('towns.txt', encoding='utf8') as f:
+    town = f.readline().strip('\n')
+    while town:
+        result = geocoder.geocode(town)
+        if result and len(result):
+            print("writing " + town)
+            longitude = result[0]['geometry']['lng']
+            latitude = result[0]['geometry']['lat']
+            towns.append((town, {'lat': latitude, 'lon': longitude}))
+            town = f.readline().strip('\n')
+
+with open('lats_lons.txt', 'w+', encoding='utf8') as f:
+    f.write(json.dumps(towns))

+ 1588 - 0
lats_lons.txt

@@ -0,0 +1,1588 @@
+[
+	{
+		"city": "seattle, wa",
+		"coordinates": {
+			"lat": 47.6038321,
+			"lon": -122.3300624
+		},
+		"photos": [
+			{
+				"filename": "IMG_4640.jpg",
+				"comments": "Here We Go."
+			},
+			{
+				"filename": "IMG_1321.jpg",
+				"comments": "My uniform was a gift from my dear friend Michael"
+			}
+		]
+	},
+	{
+		"city": "port orchard, wa",
+		"coordinates": {
+			"lat": 47.5315625,
+			"lon": -122.6384056
+		},
+		"photos": [
+			{
+				"filename": "IMG_0167.jpg"
+			},
+			{
+				"filename": "IMG_0161.jpg"
+			},
+			{
+				"filename": "IMG_0153.jpg"
+			}
+		]
+	},
+	{
+		"city": "shelton, wa",
+		"coordinates": {
+			"lat": 47.2150945,
+			"lon": -123.1007066
+		},
+		"photos": [
+			{
+				"filename": "IMG_0188.jpg",
+				"comments": "Fresh faced and naive"
+			},
+			{
+				"filename": "IMG_0181.jpg",
+				"comments": "My poor KEXP sticker... It was not long for this world after this photo."
+			},
+			{
+				"filename": "IMG_0228.jpg"
+			},
+			{
+				"filename": "IMG_0182.jpg",
+				"comments": "Nature calls."
+			}
+		]
+	},
+	{
+		"city": "montesano, wa",
+		"coordinates": {
+			"lat": 46.9812063,
+			"lon": -123.6026629
+		},
+		"photos": [
+			{
+				"filename": "IMG_0165.jpg"
+			},
+			{
+				"filename": "IMG_0212.jpg",
+				"comments": "The powerful Leftist influence of Seattle decays not even 60 miles away."
+			},
+			{
+				"filename": "IMG_0191.jpg"
+			},
+			{
+				"filename": "IMG_0203.jpg",
+				"comments": "tribute to our past"
+			},
+			{
+				"filename": "IMG_0204.jpg"
+			},
+			{
+				"filename": "IMG_0210.jpg"
+			}
+		]
+	},
+	{
+		"city": "south bend, wa",
+		"coordinates": {
+			"lat": 46.6653805,
+			"lon": -123.8105669
+		},
+		"photos": [
+			{
+				"filename": "IMG_0461.jpg",
+				"comments": "This photo is strangely prophetic of the fear I was soon to experience."
+			},
+			{
+				"filename": "IMG_0280(1).jpg",
+				"comments": "The road from hell"
+			},
+			{
+				"filename": "IMG_0281(1).jpg",
+				"comments": "My touring buddy, J."
+			},
+			{
+				"filename": "IMG_0269.jpg",
+				"comments": "My other buddies"
+			},
+			{
+				"filename": "IMG_0234.jpg",
+				"comments": "Only 86 miles to Astoria. I thought I could do it."
+			},
+			{
+				"filename": "IMG_0235.jpg",
+				"comments": "Should have stayed on 101..."
+			}
+		]
+	},
+	{
+		"city": "astoria, or",
+		"coordinates": {
+			"lat": 46.187885,
+			"lon": -123.831256
+		},
+		"photos": [
+			{
+				"filename": "IMG_0289.jpg",
+				"comments": "The sort of tourist attractions to be found in Astoria, OR."
+			},
+			{
+				"filename": "astoria-bridge.jpg",
+				"comments": "The Astoria bridge"
+			}
+		]
+	},
+	{
+		"city": "portland, or",
+		"coordinates": {
+			"lat": 45.5202471,
+			"lon": -122.6741949
+		},
+		"photos": [
+			{
+				"filename": "IMG_0298(1).jpg",
+				"comments": "Courtney Barnett got me through the hardest"
+			},
+			{
+				"filename": "IMG_0301(1).jpg"
+			},
+			{
+				"filename": "IMG_0287.jpg",
+				"comments": "Beautiful fresh new (fairly) indestructible tires"
+			},
+			{
+				"filename": "IMG_0292.jpg",
+				"comments": "Times Sq... 2,443 miles."
+			}
+		]
+	},
+	{
+		"city": "salem, or",
+		"coordinates": {
+			"lat": 44.9391565,
+			"lon": -123.033121
+		},
+		"photos": [
+			{
+				"filename": "IMG_0318.jpg",
+				"comments": "Taco Bridge"
+			},
+			{
+				"filename": "IMG_0323.jpg",
+				"comments": "Independence, OR"
+			},
+			{
+				"filename": "IMG_0311.jpg",
+				"comments": "I would pass the 45th parallel again, many days later."
+			},
+			{
+				"filename": "IMG_0321.jpg"
+			},
+			{
+				"filename": "IMG_0317.jpg"
+			},
+			{
+				"filename": "IMG_0314.jpg"
+			}
+		]
+	},
+	{
+		"city": "corvallis, or",
+		"coordinates": {
+			"lat": 44.5645659,
+			"lon": -123.2620435
+		},
+		"photos": [
+			{
+				"filename": "IMG_0328.jpg"
+			}
+
+		]
+	},
+	{
+		"city": "eugene, or",
+		"coordinates": {
+			"lat": 44.0505054,
+			"lon": -123.0950506
+		},
+		"photos": [
+			{
+				"filename": "IMG_0342.jpg"
+			},
+			{
+				"filename": "IMG_0347.jpg",
+				"comments": "a c h o o"
+			},
+			{
+				"filename": "IMG_0349.jpg",
+				"comments": "Chest hives... cute."
+			},
+			{
+				"filename": "IMG_0357.jpg",
+				"comments": "Shouts outs"
+			},
+			{
+				"filename": "IMG_0377.jpg",
+				"comments": "How could I not go"
+			},
+			{
+				"filename": "IMG_0456.jpg",
+				"comments": "Eugene mood"
+			}
+		]
+	},
+	{
+		"city": "eugene, or",
+		"coordinates": {
+			"lat": 44.0505054,
+			"lon": -123.0950506
+		}
+	},
+	{
+		"city": "rainbow, or",
+		"coordinates": {
+			"lat": 44.1667703,
+			"lon": -122.2369271
+		},
+		"photos": [
+			{
+				"filename": "IMG_0503.jpg"
+			},
+			{
+				"filename": "IMG_0492.jpg"
+			}
+		]
+	},
+	{
+		"city": "sisters, or",
+		"coordinates": {
+			"lat": 44.290948,
+			"lon": -121.5492516
+		},
+		"photos": [
+			{
+				"filename": "IMG_0518.jpg"
+			},
+			{
+				"filename": "IMG_0549.jpg",
+				"comments": "Castle at the summit of McKenzie pass"
+			},
+			{
+				"filename": "IMG_0559.jpg"
+			},
+			{
+				"filename": "IMG_0545.jpg"
+			},
+			{
+				"filename": "IMG_0552.jpg"
+			}
+		]
+	},
+	{
+		"city": "prineville, or",
+		"coordinates": {
+			"lat": 44.2998261,
+			"lon": -120.834972
+		},
+		"photos": [
+			{
+				"filename": "IMG_0571.jpg",
+				"comments": "Smith Rock"
+			},
+			{
+				"filename": "IMG_1185.jpg",
+				"comments": "AMEN"
+			},
+			{
+				"filename": "IMG_0578.jpg",
+				"comments": "Deschutes River I think??"
+			},
+			{
+				"filename": "IMG_0564.jpg",
+				"comments": "heyy ;)"
+			}
+		]
+	},
+	{
+		"city": "mitchell, or",
+		"coordinates": {
+			"lat": 44.5667772,
+			"lon": -120.1540544
+		},
+		"photos": [
+			{
+				"filename": "IMG_0661.jpg",
+				"comments": "Pastor Pat & I"
+			},
+			{
+				"filename": "IMG_0620.jpg",
+				"comments": "Jo @ Spoken 4 Hostel"
+			},
+			{
+				"filename": "IMG_0645.jpg",
+				"comments": "Painted Hills"
+			},
+			{
+				"filename": "IMG_0612.jpg",
+				"comments": "Black Butte"
+			},
+			{
+				"filename": "IMG_0613.jpg",
+				"comments": "Black Butte Redux"
+			}
+		]
+	},
+	{
+		"city": "mitchell, or",
+		"coordinates": {
+			"lat": 44.5667772,
+			"lon": -120.1540544
+		}
+	},
+	{
+		"city": "john day, or",
+		"coordinates": {
+			"lat": 44.4158398,
+			"lon": -118.9534319
+		},
+		"photos": [
+			{
+				"filename": "IMG_0682.jpg",
+				"comments": "Trees in Central Oregon inexplicably bear shoes instead of fruit."
+			},
+			{
+				"filename": "IMG_0672.jpg",
+				"comments": "And not just one tree... Numerous trees."
+			},
+			{
+				"filename": "IMG_0684.jpg",
+				"comments": "Picture Gorge"
+			},
+			{
+				"filename": "IMG_0668.jpg",
+				"comments": "Skittish baby cows"
+			},
+			{
+				"filename": "IMG_0683.jpg",
+				"comments": "Interesting dirt"
+			},
+			{
+				"filename": "IMG_0663.jpg"
+			}
+		]
+	},
+	{
+		"city": "john day, or",
+		"coordinates": {
+			"lat": 44.4158398,
+			"lon": -118.9534319
+		}
+	},
+	{
+		"city": "baker city, or",
+		"coordinates": {
+			"lat": 44.7748748,
+			"lon": -117.8343848
+		},
+		"photos": [
+			{
+				"filename": "IMG_0687.jpg"
+			},
+			{
+				"filename": "IMG_0741.jpg"
+			},
+			{
+				"filename": "IMG_0686.jpg",
+				"comments": "A baby shoe tree."
+			},
+			{
+				"filename": "IMG_0722.jpg",
+				"comments": "So many summits... three in one day."
+			},
+			{
+				"filename": "IMG_0723.jpg"
+			},
+			{
+				"filename": "IMG_0869.jpg"
+			}
+		]
+	},
+	{
+		"city": "richland, or",
+		"coordinates": {
+			"lat": 44.7693554,
+			"lon": -117.1689551
+		},
+		"photos": [
+			{
+				"filename": "IMG_0743.jpg"
+			}
+		]
+	},
+	{
+		"city": "woodhead park, id",
+		"coordinates": {
+			"lat": 44.8017,
+			"lon": -116.9231
+		},
+		"photos": [
+			{
+				"filename": "IMG_2427.jpg"
+			},
+			{
+				"filename": "IMG_0745.jpg"
+			},
+			{
+				"filename": "IMG_0600.jpg",
+				"comments": "My thanks to campmaster Joe"
+			},
+			{
+				"filename": "IMG_0607.jpg",
+				"comments": "you dip i dip we dip"
+			}
+		]
+	},
+	{
+		"city": "cambridge, id",
+		"coordinates": {
+			"lat": 44.572596,
+			"lon": -116.6760812
+		},
+		"photos": [
+			{
+				"filename": "IMG_xxx1.jpg",
+				"comments": "A Mormon Cricket"
+			},
+			{
+				"filename": "IMG_0748.jpg",
+				"comments": "A muffin from a friendly stranger"
+			},
+			{
+				"filename": "IMG_0876.jpg"
+			},
+			{
+				"filename": "IMG_0767.jpg"
+			}
+		]
+	},
+	{
+		"city": "new meadows, id",
+		"coordinates": {
+			"lat": 44.9712808,
+			"lon": -116.2840176
+		},
+		"photos": [
+			{
+				"filename": "IMG_0820.jpg"
+			},
+			{
+				"filename": "IMG_0834.jpg",
+				"comments": "Whoops"
+			}
+		]
+	},
+	{
+		"city": "white bird, id",
+		"coordinates": {
+			"lat": 45.7619335,
+			"lon": -116.3005078
+		},
+		"photos": [
+			{
+				"filename": "IMG_0865.jpg"
+			},
+			{
+				"filename": "IMG_0855.jpg",
+				"comments": "Kind strangers and surprising accommodations."
+			},
+			{
+				"filename": "IMG_0868.jpg"
+			},
+			{
+				"filename": "IMG_0872.jpg"
+			}
+		]
+	},
+	{
+		"city": "kooskia, id",
+		"coordinates": {
+			"lat": 46.1448942,
+			"lon": -115.9779188
+		},
+		"photos": [
+			{
+				"filename": "IMG_0875.jpg",
+				"comments": "Who died?"
+			}
+		]
+	},
+	{
+		"city": "lolo, mt",
+		"coordinates": {
+			"lat": 46.7590328,
+			"lon": -114.0823314
+		},
+		"photos": [
+			{
+				"filename": "IMG_0893.jpg",
+				"comments": "Montana puts these crosses on the highway where ever there has been a traffic fatality. Rather spooky."
+			}
+		]
+	},
+	{
+		"city": "missoula, mt",
+		"coordinates": {
+			"lat": 46.8700801,
+			"lon": -113.9952796
+		},
+		"photos": [
+			{
+				"filename": "IMG_bw16.jpg",
+				"comments": "Img Credit Adventure Cycling"
+			}
+		]
+	},
+	{
+		"city": "missoula, mt",
+		"coordinates": {
+			"lat": 46.8700801,
+			"lon": -113.9952796
+		}
+	},
+	{
+		"city": "missoula, mt",
+		"coordinates": {
+			"lat": 46.8700801,
+			"lon": -113.9952796
+		}
+	},
+	{
+		"city": "hamilton, mt",
+		"coordinates": {
+			"lat": 46.248886,
+			"lon": -114.154332
+		}
+	},
+	{
+		"city": "darby, mt",
+		"coordinates": {
+			"lat": 46.022659,
+			"lon": -114.178093
+		},
+		"photos": [
+			{
+				"filename": "IMG_0926.jpg"
+			}
+		]
+
+	},
+	{
+		"city": "wisdom, mt",
+		"coordinates": {
+			"lat": 45.6175681,
+			"lon": -113.4495769
+		},
+		"photos": [
+			{
+				"filename": "IMG_0937.jpg",
+				"comments": "Friendly people...more or less...but more more than less"
+			},
+			{
+				"filename": "IMG_0942.jpg"
+			},
+			{
+				"filename": "IMG_1091.jpg"
+			}
+		]
+	},
+	{
+		"city": "dillon, mt",
+		"coordinates": {
+			"lat": 45.216416,
+			"lon": -112.6378442
+		},
+		"photos": [
+			{
+				"filename": "IMG_1095.jpg",
+				"comments": "So Many Friends In Dillon Montana"
+			},
+			{
+				"filename": "IMG_1097.jpg",
+				"comments": "SO MANY"
+			}
+		]
+	},
+	{
+		"city": "dillon, mt",
+		"coordinates": {
+			"lat": 45.216416,
+			"lon": -112.6378442
+		}
+	},
+	{
+		"city": "dillon, mt",
+		"coordinates": {
+			"lat": 45.216416,
+			"lon": -112.6378442
+		}
+	},
+	{
+		"city": "whitehall, mt",
+		"coordinates": {
+			"lat": 45.87076,
+			"lon": -112.097494
+		},
+		"photos": [
+			{
+				"filename": "IMG_1099.jpg",
+				"comments": "A lil dirty"
+			},
+			{
+				"filename": "IMG_1101.jpg",
+				"comments": "Pretty dirty actually"
+			},
+			{
+				"filename": "IMG_1102.jpg",
+				"comments": "uhhh really dirty"
+			}
+		]
+	},
+	{
+		"city": "bozeman, mt",
+		"coordinates": {
+			"lat": 45.679984,
+			"lon": -111.044675
+		},
+		"photos": [
+			{
+				"filename": "IMG_1106.jpg"
+			},
+			{
+				"filename": "IMG_1107.jpg",
+				"comments": ":("
+			},
+			{
+				"filename": "IMG_1112.jpg",
+				"comments": "Thought I arrived early!!!"
+			},
+			{
+				"filename": "IMG_1115.jpg"
+			},
+			{
+				"filename": "IMG_1119.jpg"
+			},
+			{
+				"filename": "IMG_1128.jpg",
+				"comments": "Loves Labors Lost Shakespeare in the Park courtesy of MSU"
+			}
+		]
+	},
+	{
+		"city": "bozeman, mt",
+		"coordinates": {
+			"lat": 45.679984,
+			"lon": -111.044675
+		}
+	},
+	{
+		"city": "livingston, mt",
+		"coordinates": {
+			"lat": 45.662436,
+			"lon": -110.56104
+		},
+		"photos": [
+			{
+				"filename": "IMG_1133.jpg",
+				"comments": "Icecube-size hail--ow!"
+			},
+			{
+				"filename": "IMG_1177.jpg",
+				"comments": "Refuge in the bear habitat"
+			},
+			{
+				"filename": "IMG_1181.jpg",
+				"comments": "My brother had a baby"
+			}
+		]
+	},
+	{
+		"city": "columbus, mt",
+		"coordinates": {
+			"lat": 45.6366114,
+			"lon": -109.252154
+		},
+		"photos": [
+			{
+				"filename": "IMG_1183.jpg"
+			}
+		]
+	},
+	{
+		"city": "billings, mt",
+		"coordinates": {
+			"lat": 45.7874957,
+			"lon": -108.49607
+		},
+		"photos": [
+			{
+				"filename": "IMG_0015.jpg"
+			},
+			{
+				"filename": "IMG_0018.jpg"
+			},
+			{
+				"filename": "IMG_0026.jpg"
+			},
+			{
+				"filename": "IMG_0006.jpg"
+			},
+			{
+				"filename": "IMG_0004.jpg"
+			},
+			{
+				"filename": "IMG_1196.jpg"
+			},
+			{
+				"filename": "IMG_1194.jpg"
+			}
+		]
+	},
+	{
+		"city": "custer, mt",
+		"coordinates": {
+			"lat": 46.1292,
+			"lon": -107.5551
+		},
+		"photos": [
+			{
+				"filename": "IMG_1210.jpg",
+				"comments": "MAKE YOUR CHOICE!"
+			},
+			{
+				"filename": "IMG_0041.jpg",
+				"comments": "Pompeys pillar. A rock with William Clarks signature carved in it, some of the only lasting evidence of the Oregon Trail."
+			},
+			{
+				"filename": "IMG_1205.jpg"
+			},
+			{
+				"filename": "IMG_1208.jpg",
+				"comments": "Willie Clarks John Hancock"
+			}
+		]
+	},
+	{
+		"city": "miles city, mt",
+		"coordinates": {
+			"lat": 46.4085273,
+			"lon": -105.840981
+		},
+		"photos": [
+			{
+				"filename": "IMG_1213.jpg",
+				"comments": "Weird."
+			},
+			{
+				"filename": "IMG_1215.jpg",
+				"comments": "At this exact moment in time, I was listening to Terry Gross discuss the Flint water crisis."
+			},
+			{
+				"filename": "IMG_0055.jpg"
+			},
+			{
+				"filename": "IMG_0051.jpg",
+				"comments": "Miles City... Called that, I think, because it is literally ten thousand miles away from anything else"
+			},
+			{
+				"filename": "IMG_0064.jpg"
+			},
+			{
+				"filename": "IMG_1279.jpg",
+				"comments": "Pretty Dirty. As you can see, I can not fully extend my ring finger on my left hand. This is a side effect that that would only get worse with time."
+			}
+		]
+	},
+	{
+		"city": "miles city, mt",
+		"coordinates": {
+			"lat": 46.4085273,
+			"lon": -105.840981
+		}
+	},
+	{
+		"city": "baker, mt",
+		"coordinates": {
+			"lat": 46.3678114,
+			"lon": -104.2752261
+		},
+		"photos": [
+			{
+				"filename": "IMG_0066.jpg",
+				"comments": "The Ultimate Answer to Life, the Universe & Everything"
+			},
+			{
+				"filename": "IMG_0067.jpg",
+				"comments": "You ride for long enough, eventually the dirt starts to look interesting. Sometimes, it is actually interesting"
+			},
+			{
+				"filename": "IMG_0112.jpg"
+			},
+			{
+				"filename": "IMG_1291.jpg"
+			},
+			{
+				"filename": "IMG_1296.jpg"
+			}
+		]
+	},
+	{
+		"city": "bowman, nd",
+		"coordinates": {
+			"lat": 46.1831,
+			"lon": -103.3949
+		},
+		"photos": [
+			{
+				"filename": "IMG_1297.jpg",
+				"comments": "I was SO happy to finally get out of MT."
+			},
+			{
+				"filename": "IMG_1300.jpg"
+			},
+			{
+				"filename": "IMG_1301.jpg",
+				"comments": "Amen for Harold"
+			},
+			{
+				"filename": "IMG_0070.jpg"
+			},
+			{
+				"filename": "IMG_0072.jpg",
+				"comments": "It was shocking to see these small-time oil rigs on the side of the road... so weird. Locals call them Dinosaurs"
+			},
+			{
+				"filename": "IMG_0074.jpg",
+				"comments": "More interesting dirt"
+			},
+			{
+				"filename": "IMG_0082.jpg"
+			},
+			{
+				"filename": "IMG_0085.jpg"
+			},
+			{
+				"filename": "IMG_0087.jpg",
+				"comments": "Natural wildlife"
+			},
+			{
+				"filename": "IMG_0089.jpg",
+				"comments": "Artificial wildlife"
+			},
+			{
+				"filename": "IMG_0093.jpg"
+			},
+			{
+				"filename": "IMG_0099.jpg"
+			},
+			{
+				"filename": "IMG_0095.jpg"
+			}
+		]
+	},
+	{
+		"city": "mobridge, sd",
+		"coordinates": {
+			"lat": 45.537216,
+			"lon": -100.427913
+		},
+		"photos": [
+			{
+				"filename": "IMG_1317.jpg",
+				"comments": "Ran into my buddy Matt from Seattle in South Dakota like WHAT??"
+			},
+			{
+				"filename": "IMG_1318.jpg",
+				"comments": "Chillin in South Dakota"
+			},
+			{
+				"filename": "IMG_1309.jpg",
+				"comments": "Life is Good in South Dakota"
+			},
+			{
+				"filename": "IMG_1312.jpg",
+				"comments": "A cowboy riding a fish in South Dakota"
+			},
+			{
+				"filename": "IMG_1314.jpg",
+				"comments": "Sitting Bull (allegedly) buried here in South Dakota"
+			}
+		]
+	},
+	{
+		"city": "mobridge, sd",
+		"coordinates": {
+			"lat": 45.537216,
+			"lon": -100.427913
+		}
+	},
+	{
+		"city": "selby, sd",
+		"coordinates": {
+			"lat": 45.506379,
+			"lon": -100.032066
+		},
+		"photos": [
+			{
+				"filename": "IMG_1319.jpg",
+				"comments": "Pool!?!?"
+			}
+		]
+	},
+	{
+		"city": "aberdeen, sd",
+		"coordinates": {
+			"lat": 45.4649805,
+			"lon": -98.487813
+		},
+		"photos": [
+			{
+				"filename": "IMG_1325.jpg"
+			},
+			{
+				"filename": "IMG_0280.jpg"
+			}
+		]
+	},
+	{
+		"city": "waubay, sd",
+		"coordinates": {
+			"lat": 45.331904,
+			"lon": -97.305085
+		},
+		"photos": [
+			{
+				"filename": "IMG_1330.jpg",
+				"comments": "Thanks, Pete, for lunch"
+			},
+			{
+				"filename": "IMG_0119.jpg"
+			},
+			{
+				"filename": "IMG_0120.jpg"
+			}
+		]
+	},
+	{
+		"city": "benson, mn",
+		"coordinates": {
+			"lat": 45.3149604,
+			"lon": -95.6000349
+		},
+		"photos": [
+			{
+				"filename": "IMG_1340.jpg"
+			},
+			{
+				"filename": "IMG_0113.jpg"
+			},
+			{
+				"filename": "IMG_0139.jpg"
+			},
+			{
+				"filename": "IMG_0143.jpg"
+			}
+		]
+	},
+	{
+		"city": "st cloud, mn",
+		"coordinates": {
+			"lat": 45.5616075,
+			"lon": -94.1642004
+		},
+		"photos": [
+			{
+				"filename": "IMG_1345.jpg",
+				"comments": "Crossing the Mississippi was a HUGE deal!"
+			},
+			{
+				"filename": "IMG_0140.jpg"
+			},
+			{
+				"filename": "IMG_1346.jpg"
+			}
+		]
+	},
+	{
+		"city": "minneapolis, mn",
+		"coordinates": {
+			"lat": 44.9772995,
+			"lon": -93.2654692
+		},
+		"photos": [
+			{
+				"filename": "IMG_0147.jpg",
+				"comments": "I never meant to cause you any sorrow... I never meant to cause you any pain"
+			},
+			{
+				"filename": "IMG_0148.jpg",
+				"comments": "Cause baby Im a star"
+			},
+			{
+				"filename": "IMG_0151.jpg",
+				"comments": "She saw me walking the streets of your fine city"
+			},
+			{
+				"filename": "IMG_0154.jpg"
+			},
+			{
+				"filename": "IMG_0166.jpg",
+				"comments": "There is a park that is known for the faces that it attracts"
+			},
+			{
+				"filename": "IMG_1386.jpg"
+			},
+			{
+				"filename": "IMG_1420.jpg",
+				"comments": "Im not a woman/Im not a man/I am something that youll never understand"
+			},
+			{
+				"filename": "IMG_1422.jpg",
+				"comments": "I just cant believe all the things people say"
+			},
+			{
+				"filename": "IMG_1411.jpg",
+				"comments": "Dr. Mambos Combo feat. Sonny T, Chance Howard"
+			},
+			{
+				"filename": "IMG_1425.jpg",
+				"comments": "You might not know it now"
+			}
+		]
+	},
+	{
+		"city": "minneapolis, mn",
+		"coordinates": {
+			"lat": 44.9772995,
+			"lon": -93.2654692
+		}
+	},
+	{
+		"city": "minneapolis, mn",
+		"coordinates": {
+			"lat": 44.9772995,
+			"lon": -93.2654692
+		}
+	},
+	{
+		"city": "st paul, mn",
+		"coordinates": {
+			"lat": 44.9504037,
+			"lon": -93.1015026
+		},
+		"photos": [
+			{
+				"filename": "IMG_0169.jpg"
+			},
+			{
+				"filename": "IMG_0170.jpg"
+			},
+			{
+				"filename": "IMG_0193.jpg"
+			}
+		]
+	},
+	{
+		"city": "menomonie, wi",
+		"coordinates": {
+			"lat": 44.8755183,
+			"lon": -91.9193422
+		},
+		"photos": [
+			{
+				"filename": "IMG_1456.jpg"
+			},
+			{
+				"filename": "IMG_0194.jpg"
+			},
+			{
+				"filename": "IMG_1331.jpg",
+				"comments": "am i not turtly enuff for the turtle club ?"
+			}
+		]
+	},
+	{
+		"city": "eau claire, wi",
+		"coordinates": {
+			"lat": 44.811349,
+			"lon": -91.4984941
+		},
+		"photos": [
+			{
+				"filename": "IMG_1506.jpg"
+			},
+			{
+				"filename": "IMG_0200.jpg"
+			},
+			{
+				"filename": "IMG_0205.jpg"
+			}
+
+		]
+	},
+	{
+		"city": "eau claire, wi",
+		"coordinates": {
+			"lat": 44.811349,
+			"lon": -91.4984941
+		}
+	},
+	{
+		"city": "millston, wi",
+		"coordinates": {
+			"lat": 44.1930179,
+			"lon": -90.6476354
+		},
+		"photos": [
+			{
+				"filename": "IMG_0208.jpg",
+				"comments": "Unbelievable light and hospitality"
+			},
+			{
+				"filename": "IMG_0225.jpg"
+			}
+		]
+	},
+	{
+		"city": "wisconsin dells, wi",
+		"coordinates": {
+			"lat": 43.6256168,
+			"lon": -89.7715646
+		},
+		"photos": [
+			{
+				"filename": "IMG_0223.jpg"
+			},
+			{
+				"filename": "IMG_1546.jpg"
+			}
+		]
+	},
+	{
+		"city": "madison, wi",
+		"coordinates": {
+			"lat": 43.074761,
+			"lon": -89.3837613
+		},
+		"photos": [
+			{
+				"filename": "IMG_1555.jpg",
+				"comments": "Bucky Badger!"
+			},
+			{
+				"filename": "IMG_0229.jpg"
+			},
+			{
+				"filename": "IMG_0274.jpg"
+			},
+			{
+				"filename": "IMG_0277.jpg",
+				"comments": "So. Much. Corn."
+			},
+			{
+				"filename": "IMG_1551.jpg"
+			}
+		]
+	},
+	{
+		"city": "madison, wi",
+		"coordinates": {
+			"lat": 43.074761,
+			"lon": -89.3837613
+		}
+	},
+	{
+		"city": "milwaukee, wi",
+		"coordinates": {
+			"lat": 43.0349931,
+			"lon": -87.922497
+		},
+		"photos": [
+			{
+				"filename": "IMG_0243.jpg"
+			},
+			{
+				"filename": "IMG_0242.jpg",
+				"comments": "My sole source of entertainment for thousands of miles"
+			},
+			{
+				"filename": "IMG_0247.jpg",
+				"comments": "Action Shot!"
+			},
+			{
+				"filename": "IMG_1561.jpg"
+			}	
+		]
+	},
+	{
+		"city": "milwaukee, wi",
+		"coordinates": {
+			"lat": 43.0349931,
+			"lon": -87.922497
+		}
+	},
+	{
+		"city": "chicago, il",
+		"coordinates": {
+			"lat": 41.8755616,
+			"lon": -87.6244212
+		},
+		"photos": [
+			{
+				"filename": "IMG_0264.jpg",
+				"comments": "Picasso"
+			},
+			{
+				"filename": "IMG_2550.jpg",
+				"comments": "Beethoven in Gehry"
+			},
+			{
+				"filename": "IMG_0267.jpg",
+				"comments": "Syd tha Kid"
+			},
+			{
+				"filename": "IMG_1582.jpg",
+				"comments": "I camped early to be in the front for the Courtney Barnett Pitchfork show... 5th time seeing her live <3"
+			},
+			{
+				"filename": "IMG_1583.jpg",
+				"comments": "CB @ P4K"
+			},
+			{
+				"filename": "IMG_1570.jpg"
+			}
+		]
+	},
+	{
+		"city": "chicago, il",
+		"coordinates": {
+			"lat": 41.8755616,
+			"lon": -87.6244212
+		}
+	},
+	{
+		"city": "chicago, il",
+		"coordinates": {
+			"lat": 41.8755616,
+			"lon": -87.6244212
+		}
+	},
+	{
+		"city": "muskegon, mi",
+		"coordinates": {
+			"lat": 43.2341813,
+			"lon": -86.2483921
+		},
+		"photos": [
+			{
+				"filename": "IMG_1591.jpg",
+				"comments": "Goodbye, Milwaukee"
+			},
+			{
+				"filename": "IMG_1612.jpg",
+				"comments": "Look out!!"
+			}
+		]
+	},
+	{
+		"city": "muskegon, mi",
+		"coordinates": {
+			"lat": 43.2341813,
+			"lon": -86.2483921
+		}
+	},
+	{
+		"city": "muskegon, mi",
+		"coordinates": {
+			"lat": 43.2341813,
+			"lon": -86.2483921
+		}
+	},
+	{
+		"city": "greenville, mi",
+		"coordinates": {
+			"lat": 43.1775314,
+			"lon": -85.2527987
+		},
+		"photos":
+		[
+			{
+				"filename": "IMG_0275.jpg"
+			},
+			{
+				"filename": "IMG_0279.jpg",
+				"comments": "Was chased by a dog just after this photo"
+			}
+		]
+	},
+	{
+		"city": "lansing, mi",
+		"coordinates": {
+			"lat": 42.7337712,
+			"lon": -84.5553805
+		}
+	},
+	{
+		"city": "durand, mi",
+		"coordinates": {
+			"lat": 42.9119856,
+			"lon": -83.984638
+		},
+		"photos":
+		[
+			{
+				"filename": "IMG_0281.jpg",
+				"comments": "Flint"
+			},
+			{
+				"filename": "IMG_0290.jpg"
+			},
+			{
+				"filename": "IMG_0282.jpg"
+			}
+		]
+	},
+	{
+		"city": "port huron, mi",
+		"coordinates": {
+			"lat": 42.9815877,
+			"lon": -82.440466
+		},
+		"photos": [
+			{
+				"filename": "IMG_0293.jpg"
+			},
+			{
+				"filename": "IMG_1619.jpg"
+			}
+		]
+	},
+	{
+		"city": "sarnia, on",
+		"coordinates": {
+			"lat": 42.992595,
+			"lon": -82.380981
+		},
+		"photos": [
+			{
+				"filename": "IMG_1623.jpg"
+			},
+			{
+				"filename": "IMG_1638.jpg",
+				"comments": "Their stupid monopoly money"
+			}
+		]
+	},
+	{
+		"city": "london, on",
+		"coordinates": {
+			"lat": 42.988576,
+			"lon": -81.246643
+		},
+		"photos": [
+			{
+				"filename": "IMG_1647.jpg"
+			}
+		]
+	},
+	{
+		"city": "waterloo, on",
+		"coordinates": {
+			"lat": 43.466874,
+			"lon": -80.524635
+		}
+	},
+	{
+		"city": "toronto, on",
+		"coordinates": {
+			"lat": 43.653963,
+			"lon": -79.387207
+		},
+		"photos":
+		[
+			{
+				"filename": "IMG_1675.jpg"
+			},
+			{
+				"filename": "IMG_1678.jpg",
+				"comments": "Graffiti Alley"
+			},
+			{
+				"filename": "IMG_1682.jpg"
+			}		]
+	},
+	{
+		"city": "toronto, on",
+		"coordinates": {
+			"lat": 43.653963,
+			"lon": -79.387207
+		}
+	},
+	{
+		"city": "hamilton, on",
+		"coordinates": {
+			"lat": 43.255205,
+			"lon": -79.868202
+		},
+		"photos":
+		[
+			{
+				"filename": "IMG_1686.jpg"
+			}
+
+		]
+	},
+	{
+		"city": "hamilton, on",
+		"coordinates": {
+			"lat": 43.255205,
+			"lon": -79.868202
+		}
+	},
+	{
+		"city": "niagara falls, on",
+		"coordinates": {
+			"lat": 43.0962,
+			"lon": -79.0377
+		},
+		"photos": [
+			{
+				"filename": "IMG_1713.jpg",
+			"comments": "Slooooowwwly I turned.... Step By Step.... Inch By Inch..."
+			},
+			{
+				"filename": "IMG_1719.jpg",
+				"comments": "Glove tan"
+			},
+			{
+				"filename": "IMG_0294.jpg"
+			}
+		]
+
+	},
+	{
+		"city": "albion, ny",
+		"coordinates": {
+			"lat": 43.246488,
+			"lon": -78.193516
+		},
+		"photos": [
+			{
+				"filename": "IMG_1708.jpg",
+				"comments": "EMPIRE STATE"
+			},
+			{
+				"filename": "IMG_0298.jpg"
+			}
+		]
+	},
+	{
+		"city": "rochester, ny",
+		"coordinates": {
+			"lat": 43.157285,
+			"lon": -77.615214
+		},
+		"photos": [
+			{
+				"filename": "IMG_0299.jpg",
+				"comments": "Literal obstacles"
+			},
+			{
+				"filename": "IMG_1724.jpg",
+				"comments": "Rochester friends"
+			}
+		]
+	},
+	{
+		"city": "rochester, ny",
+		"coordinates": {
+			"lat": 43.157285,
+			"lon": -77.615214
+		}
+	},
+	{ 
+		"city": "weedsport, ny",
+		"coordinates": {
+			"lat": 43.048677,
+			"lon": -76.5627197
+		},
+		"photos": [
+			{
+				"filename": "IMG_0301.jpg",
+				"comments": "Jesus"
+			}
+		]
+	},
+	{
+		"city": "utica, ny",
+		"coordinates": {
+			"lat": 43.1009031,
+			"lon": -75.2326641
+		},
+		"photos": [
+			{
+				"filename": "IMG_1736.jpg",
+				"comments": "Neat."
+			},
+			{
+				"filename": "IMG_1693.jpg",
+				"comments": "Neat."
+			}
+		]
+	},
+	{
+		"city": "schenectady, ny",
+		"coordinates": {
+			"lat": 42.8142432,
+			"lon": -73.9395687
+		},
+		"photos": [
+			{
+				"filename": "IMG_1737.jpg",
+				"comments": "Wowww"
+			},
+			{
+				"filename": "IMG_1746.jpg",
+				"comments": "Gross. Cant wait to cut it off."
+			}
+		]
+	},
+	{
+		"city": "schenectady, ny",
+		"coordinates": {
+			"lat": 42.8142432,
+			"lon": -73.9395687
+		}
+	},
+	{
+		"city": "new york, ny",
+		"coordinates": {
+			"lat": 40.7308619,
+			"lon": -73.9871558
+		},
+		"photos": [
+			{
+				"filename": "IMG_0306.jpg",
+				"comments": "Here in NYC"
+			},
+			{
+				"filename": "IMG_1866.jpg"
+			}
+		]
+		,"buck": "stops here"
+	}
+]

+ 1 - 0
main.py

@@ -0,0 +1 @@
+from app import app

BIN
main.pyc


+ 9 - 0
mv_img.sh

@@ -0,0 +1,9 @@
+#!/bin/bash
+
+for img_num in "$@"; do
+
+	echo "Moving $img_num from DLs to PHOTOs"
+
+	mv ~/Downloads/IMG_${img_num}.JPG static/photos/IMG_${img_num}.jpg
+
+done

+ 9 - 0
open_img.sh

@@ -0,0 +1,9 @@
+#!/bin/bash
+
+for img_num in "$@"; do
+
+	echo "Opening $img_num"
+
+	open static/photos/IMG_${img_num}.jpg
+
+done

+ 12 - 0
prestart.sh

@@ -0,0 +1,12 @@
+#! /usr/bin/env sh
+
+echo "Running inside /app/prestart.sh, you could add migrations to this file, e.g.:"
+
+echo "
+#! /usr/bin/env sh
+
+# Let the DB start
+sleep 10;
+# Run migrations
+alembic upgrade head
+"

+ 2 - 0
requirements.txt

@@ -0,0 +1,2 @@
+Flask
+Werkzeug

+ 6 - 0
start.sh

@@ -0,0 +1,6 @@
+#!/bin/bash
+app="docker.test"
+docker build -t ${app} .
+docker run -d -p 56733:80 \
+  --name=${app} \
+  -v $PWD:/app ${app}

+ 31 - 0
static/faq.css

@@ -0,0 +1,31 @@
+div.town {
+	background-color: #ffd8e1;
+	padding: 20px;
+	margin: 20px;
+	border-radius: 15px;
+}
+
+div.town h1 {
+	font-size: 6em;
+	margin: 15px;
+	padding: 15px;
+}
+.container {
+	padding: 5px;
+	width: 60%;
+	margin-bottom: 50px;
+}
+
+p, li {
+	font-size: 20px;
+}
+
+h1 {
+	font-size: 6em;
+	margin-bottom: 30px;
+}
+
+h2 {
+	font-size: 3em;
+	margin-bottom: 20px;
+}

+ 24 - 0
static/glossary.css

@@ -0,0 +1,24 @@
+
+.container {
+	padding: 5px;
+	width: 60%;
+	margin-bottom: 50px;
+}
+
+dl {
+	font-size: 20px;
+}
+
+dt {
+	margin-top: 20px;
+}
+
+h1 {
+	font-size: 6em;
+	margin-bottom: 30px;
+}
+
+h2 {
+	font-size: 3em;
+	margin-bottom: 20px;
+}

+ 29 - 0
static/highlights.css

@@ -0,0 +1,29 @@
+.container {
+	padding: 5px;
+	width: 60%;
+}
+
+h1 {
+	font-size: 6em;
+	margin-bottom: 5px;
+}
+
+h2 {
+	font-size: 4em;
+	margin-left: 45px;
+	margin-bottom: 30px;
+}
+
+h3 {
+	font-size: 2.5em;
+}
+
+img {
+	width: 100%;
+	/* float: left; */
+	margin: 15px;
+}
+
+p {
+	font-size: 20px;
+}

+ 57 - 0
static/home.css

@@ -0,0 +1,57 @@
+body, html {
+	height: 100%;
+	margin: 0px;
+	padding: 0px;
+}
+
+h1 {
+	margin-top: 0px;
+	font-size: 6em;
+	font-size: 6vw;
+	text-align: center;
+}
+h2 {
+	font-size: 3em;
+	font-size: 4vw;
+	position: fixed;
+	bottom: 0px;
+	width: 50%;
+}
+
+span {
+	border-style: solid;
+	border-width: 2px;
+	border-radius: 2px;
+	border-color: #ffd8e1;
+	margin: 5px;
+	padding: 10px;
+	background-color: rgba(253, 244, 255, 0.5);
+}
+
+#journey {
+	position: fixed;
+	text-align: right;
+	bottom: 0px;
+	right: 0px;
+	width: 45%;
+	margin-right: 30px;
+}
+
+
+.bg {
+	margin: 0px;
+	background-image: url('/static/photos/homepage.jpg');
+	height: 100%;
+	background-position: center;
+	background-repeat: no-repeat;
+	background-size: cover;
+}
+h1, h2 {
+	color: #ffd8e1;
+	/* color: #f44274; */
+	font-family: verdana;
+	-webkit-text-stroke-width: 1px;
+	-webkit-text-stroke-color: black;
+	text-shadow: 2px 2px black;
+	padding: 10px;
+}

BIN
static/js/.map.js.swp


+ 32 - 0
static/js/lazy.js

@@ -0,0 +1,32 @@
+// LAZY LODING JS
+// CREDIT: Rahul Nanwani
+// https://css-tricks.com/the-complete-guide-to-lazy-loading-images/
+document.addEventListener("DOMContentLoaded", function() {
+  var lazyloadImages = document.querySelectorAll("img.lazy");    
+  var lazyloadThrottleTimeout;
+  
+  function lazyload () {
+    if(lazyloadThrottleTimeout) {
+      clearTimeout(lazyloadThrottleTimeout);
+    }    
+    
+    lazyloadThrottleTimeout = setTimeout(function() {
+        var scrollTop = window.pageYOffset;
+        lazyloadImages.forEach(function(img) {
+            if(img.offsetTop < (window.innerHeight + scrollTop)) {
+              img.src = img.dataset.src;
+              img.classList.remove('lazy');
+            }
+        });
+        if(lazyloadImages.length == 0) { 
+          document.removeEventListener("scroll", lazyload);
+          window.removeEventListener("resize", lazyload);
+          window.removeEventListener("orientationChange", lazyload);
+        }
+    }, 20);
+  }
+  
+  document.addEventListener("scroll", lazyload);
+  window.addEventListener("resize", lazyload);
+  window.addEventListener("orientationChange", lazyload);
+});

+ 72 - 0
static/js/map.js

@@ -0,0 +1,72 @@
+var longitude = -95.125;
+var latitude = 40.596;
+var zoom = 5;
+// var mymap = L.map('mapid').setView([latitude, longitude], zoom);
+var accessToken = "pk.eyJ1Ijoiam9yZGFuZGFzaGVsIiwiYSI6ImNqdWQ3OHlneTBsMms0NG82YTVkMmg3dHgifQ.NmgYJNL8FVwq-gctstiAVA"
+// L.tileLayer('https://api.tiles.mapbox.com/v4/{id}/{z}/{x}/{y}.png?access_token={accessToken}', {
+//     attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors, <a href="https://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Imagery © <a href="https://www.mapbox.com/">Mapbox</a>',
+//     maxZoom: 18,
+//     id: 'mapbox.streets',
+//     accessToken: accessToken
+// }).addTo(mymap);
+mapboxgl.accessToken = accessToken;
+var mymap = new mapboxgl.Map({
+	container: 'mapid',
+	style: 'mapbox://styles/mapbox/streets-v11',
+	center: [longitude, latitude],
+	zoom: 3
+});
+
+function addPin(town) {
+    town = town.replace(/u'/g, "'");
+    town = town.replace(/'/g, '"');
+    town = JSON.parse(town);
+    latitude = town.coordinates.lat;
+    longitude = town.coordinates.lon;
+    city = town.city;
+
+    anchor = city.split(',')[0].replace(' ', '');
+
+    htmlContent = "<a href='/stops#" + anchor + "'>";
+    htmlContent += "<h1>" + city + "</h1><br/>";
+    if (town.photos) {
+        htmlContent += "<img class='townphoto' src='/static/photos/" + town.photos[0].filename + "'>";
+    }
+    htmlContent += "</a>";
+
+    var pin = new mapboxgl.Marker()
+	.setLngLat([longitude, latitude])
+	.setPopup(new mapboxgl.Popup().setMaxWidth("none").setHTML(htmlContent))
+	.addTo(mymap);
+    // var pin = L.marker([latitude, longitude]).addTo(mymap);
+    // pin.bindPopup(htmlContent, {maxWidth: "auto"});
+
+    // This is a hack to center the pointers above the pins.
+        // When you first open a pin, the triangle pointing to
+        // the pin is centered to the image, nowhere near the
+        // pin. If you close and reopen -- manually OR 
+        // automatically -- it will reset the marker to where
+        // it should be. These two functions are a workaround.
+    // pin.openPopup();
+    // mymap.closePopup();
+}
+
+function resizePins() {
+    // Popups were not resizing to fit images. I could not figure it out.
+    // This drove me nuts; I think it's exposing my webdev ignorance.
+    // Solution credit: https://stackoverflow.com/questions/38170366/leaflet-adjust-popup-to-picture-size
+    document.querySelector(".leaflet-popup-pane").addEventListener("load", function (event) {
+        var tagName = event.target.tagName,
+            popup = mymap._popup; // Currently open popup, if any.
+
+        if (tagName === "IMG" && popup) {
+            popup.update();
+        }
+    }, true); // Capture the load event, because it does not bubble.
+}
+function recenterMap() {
+    var longitude = -95.125;
+    var latitude = 40.596;
+    zoom = 5;
+    mymap.setView([latitude, longitude], zoom);
+}

+ 35 - 0
static/map.css

@@ -0,0 +1,35 @@
+#mapid {
+	height: 100%;
+	width: 100%;
+}
+h1 {
+	font-size: 4em;
+	padding: 2px;
+	margin: 2px;
+}
+.townphoto {
+	max-height: 400px;
+	max-width: 400px;
+}
+
+#mapstops {
+	z-index: 800;
+	font-size: 2em;
+	text-decoration: none;
+	position: fixed;
+	padding: 8px;
+	bottom: 19px;
+	right: 4px;
+	border-style: solid;
+	border-width: 2px;
+	border-radius: 2px;
+	border-color: #ffd8e1;
+	margin: 5px;
+	background-color: rgba(253, 244, 255, 0.5);
+}
+
+#mapstops a {
+	font-family: "Helvetica Neue",Helvetica,Arial,sans-serif;
+	text-decoration: none;
+	color: black;
+}

+ 99 - 0
static/stops.css

@@ -0,0 +1,99 @@
+div.town {
+	background-color: #ffd8e1;
+	padding: 20px;
+	padding-top: 5px;
+	margin: 20px;
+	border-radius: 15px;
+}
+
+.townphoto {  
+	margin: auto;
+	width: auto;
+	max-width: 600px;
+	height: 600px;
+	max-height: 600px;
+	height: 100%;
+}
+
+.carousel {
+	margin: 20px;
+}
+
+.carousel-inner {
+	height: 600px;
+}
+
+.carousel-control.right, .carousel-control.left {
+	background-image: none;
+	font-size: 30px;
+	color: #555;
+}
+
+div.town h1 {
+	font-size: 6em;
+	margin: 2px;
+	padding: 2px;
+}
+.container {
+	padding: 5px;
+	width: 60%;
+}
+
+.carousel-caption {
+	margin-bottom: 20px;
+	padding: 5px;
+	right: 15%;
+	left: 15%;
+	border-radius: 15px;
+	background-color: rgba(188, 188, 188, 0.5);
+}
+.carousel-caption p {
+	font-size: 20px;
+	color: #f2f2f2;
+}
+
+p, li {
+	font-size: 20px;
+}
+
+img {
+	/* margin: 25px; */
+	/* padding: 25px; */
+	display: block;
+	margin-left: auto;
+	margin-right: auto;
+	padding-top: 20px;
+	padding-bottom: 20px;
+}
+
+.solophoto {
+	width: 800px;
+	height: auto;
+}
+
+.day-links {
+	font-size: 1.25em;
+	color: black;
+}
+
+h1 {
+	font-size: 6em;
+	margin-bottom: 5px;
+}
+
+h2 {
+	font-size: 2.5em;
+	margin-left: 45px;
+	margin-bottom: 30px;
+}
+
+h3 {
+	font-size: 2.5em;
+}
+
+dl {
+	padding-left: 50px;
+	padding-right: 50px;
+	padding-top: 10px;
+	padding-bottom: 10px;
+}

Some files were not shown because too many files changed in this diff