diff --git a/bgpwtf/landing/README.md b/bgpwtf/landing/README.md
new file mode 100644
index 0000000..cc7c44a
--- /dev/null
+++ b/bgpwtf/landing/README.md
@@ -0,0 +1,8 @@
+bgpwtf landing page
+===================
+
+This is what runs on https://bgp.wtf .
+
+It's currently hosted on GAE.
+
+    TODO(q3k): GAE deployment instructions, or move to kube?
diff --git a/bgpwtf/landing/app.yaml b/bgpwtf/landing/app.yaml
new file mode 100644
index 0000000..7bd3e61
--- /dev/null
+++ b/bgpwtf/landing/app.yaml
@@ -0,0 +1,18 @@
+runtime: python27
+api_version: 1
+threadsafe: true
+
+handlers:
+- url: /i
+  static_dir: i
+  secure: always
+
+- url: /.*
+  script: main.app
+  secure: always
+
+libraries:
+- name: webapp2
+  version: latest
+- name: jinja2
+  version: latest
diff --git a/bgpwtf/landing/i/epix.png b/bgpwtf/landing/i/epix.png
new file mode 100644
index 0000000..00fdd73
--- /dev/null
+++ b/bgpwtf/landing/i/epix.png
Binary files differ
diff --git a/bgpwtf/landing/i/nitronet.png b/bgpwtf/landing/i/nitronet.png
new file mode 100644
index 0000000..11f64bc
--- /dev/null
+++ b/bgpwtf/landing/i/nitronet.png
Binary files differ
diff --git a/bgpwtf/landing/i/pepper.png b/bgpwtf/landing/i/pepper.png
new file mode 100644
index 0000000..16b8e78
--- /dev/null
+++ b/bgpwtf/landing/i/pepper.png
Binary files differ
diff --git a/bgpwtf/landing/index.html b/bgpwtf/landing/index.html
new file mode 100644
index 0000000..bad0c19
--- /dev/null
+++ b/bgpwtf/landing/index.html
@@ -0,0 +1,89 @@
+<!doctype html>
+<html>
+    <head>
+        <meta charset="utf-8">
+        <title>bgp.wtf</title>
+        <style type="text/css">
+            body {
+                margin: 80px auto;
+                line-height: 1.6;
+                font-size: 18px;
+                max-width: 650px;
+                color: #444;
+                background-color: #eee;
+                padding: 0 10px;
+                font-family: helvetica, arial, sans-serif;
+            }
+            a {
+                color: #444;
+                font-weight: 600;
+                text-decoration: none;
+            }
+            a:hover {
+                text-decoration: underline;
+            }
+            span.snippet {
+                font-family: system, courier new, serif;
+            }
+            div.container {
+                background-color: #f8f8f8;
+                padding: 10px 20px 10px 20px;
+                box-shadow: 0 4px 8px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19);
+                margin-bottom: 40px;
+            }
+            div.container h1, h2, h3 {
+                margin: 0;
+            }
+            div.logos {
+                text-align: center;
+            }
+            div.logos img {
+                height: 100px;
+                margin-left: 10px;
+                margin-right: 10px;
+            }
+            div.pepper {
+                width: 128px;
+                height: 128px;
+                background-image: url('i/pepper.png');
+                position: absolute;
+                bottom: 100px;
+                right: 100px;
+                opacity: 0.05;
+            }
+            div.pepper:hover {
+                opacity: 1.0;
+            }
+        </style>
+    </head>
+    <body>
+        <div class="container">
+            <h1>bgp.wtf</h1>
+            <p>
+                The non-profit ISP arm of the <a href="https://hackerspace.pl/">Warsaw Hackerspace</a>. Doing weird stuff on the Internet since 2017.
+            </p>
+            <p>
+                We offer <a href="https://internet.hackerspace.pl/">Internet connectivity in and around Wolność 2A in Warsaw</a>.
+            </p>
+            <p>
+                We peer. Meet us at EPIX-WAR, Wolność 2A in Warsaw.
+            </p>
+            <p>
+                Do you want to learn how the Internet works by running your own v6 CDN? Are you curious how it's like to set up a BGP session? Is DN42 too boring? We also sponsor ASNs and lease v6 address space to likely-minded entities around the world!
+            </p>
+        </div>
+        <div class="container">
+            <p>
+                Chat with us on <span class="snippet">#bgpwtf</span> on Freenode, or by writing an email to <span class="snippet">noc</span> at <span class="snippet">hackerspace.pl</span>.
+            </p>
+        </div>
+        <div class="container">
+            <h3>sponsors &amp; partners</h3>
+            <div class="logos">
+                <a href="http://www.nitronet.pl"><img src="i/nitronet.png" alt="Nitronet logo" title="Nitronet"></a>
+                <a href="https://www.epix.net.pl"><img src="i/epix.png" alt="EPIX logo" title="EPIX"></a>
+            </div>
+        </div>
+        <div class="pepper"> </div>
+    </body>
+</html>
diff --git a/bgpwtf/landing/main.py b/bgpwtf/landing/main.py
new file mode 100644
index 0000000..90011db
--- /dev/null
+++ b/bgpwtf/landing/main.py
@@ -0,0 +1,37 @@
+import jinja2
+import webapp2
+import os
+
+JINJA_ENVIRONMENT = jinja2.Environment(
+    loader=jinja2.FileSystemLoader(os.path.dirname(__file__)),
+    extensions=['jinja2.ext.autoescape'],
+    autoescape=True)
+
+class LandingPage(webapp2.RequestHandler):
+    def get(self):
+        template_values = {}
+        template = JINJA_ENVIRONMENT.get_template('index.html')
+        self.response.write(template.render(template_values))
+
+class Camp19Page(webapp2.RequestHandler):
+    def get(self):
+        self.redirect('https://events.ccc.de/camp/2019/wiki/Village:IXP')
+
+class PricingPage(webapp2.RequestHandler):
+    def get(self):
+        template_values = {}
+        template = JINJA_ENVIRONMENT.get_template('pricing.html')
+        self.response.write(template.render(template_values))
+
+app = webapp2.WSGIApplication([
+    ('/', LandingPage),
+    ('/cccamp19', Camp19Page),
+    ('/ccccamp19', Camp19Page),
+    ('/camp19', Camp19Page),
+    ('/camp', Camp19Page),
+    ('/cccamp', Camp19Page),
+    ('/ccccamp', Camp19Page),
+    ('/pricing', PricingPage),
+    ('/prices', PricingPage),
+    ('/price', PricingPage),
+], debug=False)
diff --git a/bgpwtf/landing/pricing.html b/bgpwtf/landing/pricing.html
new file mode 100644
index 0000000..bea48b0
--- /dev/null
+++ b/bgpwtf/landing/pricing.html
@@ -0,0 +1,148 @@
+<!doctype html>
+<html>
+  <head>
+    <meta charset="UTF-8">
+    <title>Warsaw Hackerspace Hosting Services</title>
+    <style type="text/css">
+body {
+  background-color: #f8f8f8;
+  font-family: courier, monospace;
+  display: flex;
+  flex-direction: column;
+  align-items: center;
+}
+#page {
+  max-width: 50em;
+  font-size: 1.0em;
+  line-height: 1.5em;
+}
+h2 {
+  margin-top: 2.5em;
+}
+h3 {
+  margin-top: 2em;
+}
+    </style>
+  </head>
+  <body>
+    <div id="page">
+      <h1>Warsaw Hackerspace Hosting Services</h1>
+      <div style="float: right"><a href="/?lang=pl">PL</a> | <a href="/?lang=en">EN</a></div>
+      <p>
+        Nine Fives SLA for the masses.
+      </p>
+
+      <h2>What is this?</h2>
+      <p>
+        The <a href="https://hackerspace.pl/about_en">Warsaw Hackerspace</a> is a Non-Profit, Non-Governmental Organization from Warsaw that runs a bunch of infrastructure for its own needs. In order to make back some of our expenses (network connection, cooling, ...), we decided to start renting out some of our services to outside customers. All of the proceeds will go towards the statuatory goals of the Organization: maintaining and expanding our hackerspace, teaching and education, running classes and generally making the world a better place.
+      </p>
+      <p>
+        Give us money, receive rack space or dedicated servers. And most importantly, <b>a warm fuzzy feeling from supporting a hackerspace</b> &lt;3.
+      </p>
+      <p>
+        Remember, we're a Hackerspace. While we try to maintain as high as un uptime as possible, power and Internet interruptions are always an option, as we do not (yet) have any redundancy in place. So yeah, no warranty. Seriously. If we're down for more than 5% of a given month, your bill will be proportionately lowered to match our downtime - we're not monsters, after all.
+      </p>
+      <h2>Ordering</h2>
+      <p>
+        Contact us at <b>noc@hackerspace.pl</b> and tell us who you are and what you need. We'll respond with a final quote and our world famous NO WARRANTY, NO SLA, NO NOTHING agreement. What follows are list prices in EUR, <b>net (add 23% VAT unless you're a registered EU company with a VAT number)</b>.
+      </p>
+      <h2>Colocation</h2>
+      <p>
+        We can throw your hardware into one of our 42U racks. We'll provide you power and a way to monitor and manage it. Bring your own KVM/iKVM, or rely on lazy remote hands. We measure power usage via a kill-a-watt, and you're billed monthly based on the power you use.
+      </p>
+      <p>
+        <b>What you get</b>:
+        <ul>
+          <li>19" rack space <i>(we do not accept non-rack hardware unless it's something really cool)</i></li>
+          <li>230V AC 50Hz via a C14 plug on a 16A circuit</li>
+          <li>1GbE (copper) or 10GbE (SFP+) switch port <i>(includes best effort Internet access)</i></li>
+        </ul>
+        <b>Pricing</b>: €20 per month per rack unit. €0.25 per KWh.
+      </p>
+      <h2>Dedicated Servers</h2>
+      <p>
+        We have some servers that we can rent you out. We'll provide you with a way to manage the power on it, remotely reinstall the operating system. Some of the machines also come with integrated KVM.
+      </p>
+      <p>
+       <h3>BL-BASE</h3>
+        A Dell M610 blade server.
+        <ul>
+          <li>Xeon L5520 @2.27GHz, 8c/16t</li>
+          <li>24GB RAM ECC</li>
+          <li>2x 140GB SAS <i>(used - use RAID1!)</i></li>
+          <li>KVM <i>(power control, console, keyboard, mouse, ISO mount)</i></li>
+          <li>Hardware RAID controller with BBU(PERC)</li>
+          <li>2x Gigabit Ethernet</li>
+        </ul>
+        <b>Pricing</b>: €45 per month.
+      </p>
+      <p>
+       <h3>BL-64-SSD</h3>
+        A souped-up Dell M610 blade server.
+        <ul>
+          <li>Xeon L5520 @2.27GHz, 8c/16t</li>
+          <li>64GB RAM ECC</li>
+          <li>2x 480GB consumer MLC SSD</li>
+          <li>KVM <i>(power control, console, keyboard, mouse, ISO mount)</i></li>
+          <li>Hardware RAID controller with BBU (PERC)</li>
+          <li>2x Gigabit Ethernet</li>
+        </ul>
+        <b>Pricing</b>: €55 per month.
+      </p>
+      <p>
+       <h3>BL-64-HDD</h3>
+        A further souped-up Dell M610 blade server.
+        <ul>
+          <li>Xeon L5520 @2.27GHz, 8c/16t</li>
+          <li>64GB RAM ECC</li>
+          <li>2x 2TB consumer 2.5" HDD</li>
+          <li>KVM <i>(power control, console, keyboard, mouse, ISO mount)</i></li>
+          <li>Hardware RAID controller with BBU (PERC)</li>
+          <li>2x Gigabit Ethernet</li>
+        </ul>
+        <b>Pricing</b>: €65 per month.
+      </p>
+      <p>
+       <h3>KEKTOP</h3>
+        <p>
+          Way back when, the Hackerspace acquired a whole bunch a Nettop-class machines that used to display advertising in Warsaw taxicabs. After christening them as 'kektops' (hey, that was before the world went to shit), we have decided to rack them up in a custom enclosure with power management, and turned them into a perfect VPS-class dedicated server.
+        </p>
+        <p>
+          Even though the seem underpowered at first glance, they are fairly capable - much more so than a Raspberry Pi, for instance. They make perfect little servers for hosting a blog or small service. Just make sure to get two for redundancy :).
+        </p>
+        <ul>
+          <li>Intel Atom @1.60GHz, 1c/2t</li>
+          <li>2GB RAM</li>
+          <li>16GB SSD</li>
+          <li>Gigabit Ethernet</li>
+        </ul>
+        <b>Pricing</b>: €10 per month + Internet.
+      </p>
+      <h2>Internet Access</h2>
+      <p>
+        We provide upstream via <a href="https://bgp.wtf/">bgp.wtf/AS204880</a>, which has decent connectivity with Poland and to the world (upstreams are Level 3, Telia, GTT, RETN, DE-CIX). We also have direct peering with Google (AS15169), and are present in KleyReX and LocIX.
+      </p>
+      <p>
+         Currently our main upstream circuit is 1GbE, with plans to upgrade to 10GbE as soon as enough commitment is purchased by customers.
+      </p>
+      <p>
+        As we're a registered ISP, we are governed by laws requiring us to provide LEAs with identifying information about customers if a warrant is served for illegal activity. Thus, we will need to collect such some personal information from you (name, address, phone number). The Hackerspace is under the jurisdiction of Polish law.
+      </p>
+      <p>
+        We have a zero tolerance policy towards spam. Customers not responsive to abuse@ requests will have their contract immediately terminated.
+      <p>
+        <b>What you get</b>:
+        <ul>
+          <li>A public IPv4 address and a /64 or /48 of IPv6 addresses</li>
+          <li>Reverse DNS</li>
+          <li>Speed burstable to wire speed of the switch/machine</li>
+        </ul>
+        <b>Pricing</b>: €7 for every 10Mbps of Internet bandwidth committment (can be shared across all of your services).
+      </p>
+      <h2>Extra Features</h2>
+      <p>
+        Contact us for any extra features, like BGP routing, VLANs, extra addresses, ASN sponsorship, ...
+      </p>
+    </div>
+  </body>
+</html>
