diff --git a/client/bundles/fortune.md b/client/bundles/fortune.md
deleted file mode 100644
index c319cd4..0000000
--- a/client/bundles/fortune.md
+++ /dev/null
@@ -1,78 +0,0 @@
-= yaml =
-title: Playground example - Fortune
-status: draft
-sort: 05
-= yaml =
-
-<span style="background-color:red">
-TODO(jregan): plan is to insert one or more of these as appropriate in tutorials
-</span>
-
-(Taken from: https://docs.google.com/a/google.com/document/d/189JXetSjHc980LuSl88Y7_VtG4tyZ0iggILEWD2_JKc/edit#)
-
-This is an example of a simple Fortune application in Vanadium.  It has two
-parts, a client and a server.  The client can either request a fortune from the
-server, or add a new fortune to the server.
-
-
-## Interface Definition
-
-The remote interface exposed by the server is defined in a .vdl file.  Here is
-an example Fortune service:
-
-    package fortune
-
-    type Fortune interface {
-      // Returns a random fortune.
-      Get() (Fortune string | error)
-
-      // Adds a fortune to the set used by Get().
-      Add(Fortune string) error
-    }
-
-The services exposes two methods - `Get` which returns a random fortune string
-from a fortune repository held by the service, and `Add` that adds the provided
-fortune string to the repository.
-
-
-## Implementation
-
-### Server
-
-<div class="lang-go">
-The server implements the `Get` and `Add` methods defined in the vdl interface.
-
-Inside the `main()` function, we create a new Vanadium runtime with
-`r := rt.New()`, and use the runtime to create a new server with
-`r.NewServer()`.
-
-We use the `fortune` package generated from the vdl along with the fortuned
-implementation to create a new fortune server.
-
-The server listens for a tcp connection on localhost, and mounts itself on the
-mounttable with the name "fortune".
-</div>
-
-<!--
-<span class="lang-js">TODO(nlacasse): describe the js server</span>
--->
-
-### Client
-
-<div class="lang-go">
-The client binds to the fortune server with a `.FortuneClient("fortune")` call,
-and then issues a `Get` request.  We do the `.Get` request in a loop to give
-the server a chance to start up.
-</div>
-
-<!--
-<span class="lang-js">TODO(nlacasse): describe the js client</span>
--->
-
-### Code
-
-<div class="lang-go playground" data-srcdir="/fortune/ex0_go"></div>
-
-<!--
-<div class="lang-js playground" data-srcdir="/fortune/ex0_js"></div>
--->
diff --git a/go/src/v.io/x/playground/deploy/monitor.py b/go/src/v.io/x/playground/deploy/monitor.py
deleted file mode 100755
index 5a5a0f6..0000000
--- a/go/src/v.io/x/playground/deploy/monitor.py
+++ /dev/null
@@ -1,72 +0,0 @@
-#!/usr/bin/python2.7
-# Copyright 2015 The Vanadium Authors. All rights reserved.
-# Use of this source code is governed by a BSD-style
-# license that can be found in the LICENSE file.
-
-"""Playground GCE monitoring script.
-
-This needs to run on a GCE VM with the replica pool service account scope
-(https://www.googleapis.com/auth/ndev.cloudman).
-
-You also need to enable preview in gcloud:
-$ gcloud components update preview
-
-Then add it to your crontab, e.g.
-*/10 * * * * gcloud preview replica-pools --zone us-central1-a replicas --pool playground-pool list|monitor.py
-"""
-
-import datetime
-import subprocess
-import sys
-import yaml
-
-DESIRED = 2
-MAX_ALIVE_MIN = 60
-POOL = 'playground-pool'
-
-
-def RunCommand(*args):
-  cmd = ['gcloud', 'preview', 'replica-pools', '--zone', 'us-central1-a']
-  cmd.extend(args)
-  subprocess.check_call(cmd)
-
-
-def ResizePool(size):
-  RunCommand('resize', '--new-size', str(size), POOL)
-
-
-def ShouldRestart(replica):
-  if replica['status']['state'] == 'PERMANENTLY_FAILING':
-    print 'Replica %s failed: %s' % (
-        replica['name'], replica['status']['details'])
-    return True
-  return IsTooOld(replica)
-
-
-def IsTooOld(replica):
-  start_text = replica['status']['vmStartTime']
-  if start_text:
-    start = yaml.load(start_text)
-    uptime = datetime.datetime.now() - start
-    return uptime.seconds > MAX_ALIVE_MIN * 60
-
-
-def RestartReplica(replica):
-  print 'Restarting replica ' + replica['name']
-  ResizePool(DESIRED + 1)
-  RunCommand('replicas', '--pool', POOL, 'delete', replica['name'])
-
-
-def MaybeRestartReplica(replica):
-  if ShouldRestart(replica):
-    RestartReplica(replica)
-
-
-def main():
-  replicas = yaml.load_all(sys.stdin.read())
-  for replica in replicas:
-    MaybeRestartReplica(replica)
-
-
-if __name__ == '__main__':
-  main()
