diff --git a/strategoxt-dist/build+upload.sh b/strategoxt-dist/build+upload.sh
new file mode 100755
index 00000000000..22592ca570a
--- /dev/null
+++ b/strategoxt-dist/build+upload.sh
@@ -0,0 +1,29 @@
+#! /bin/sh
+
+url="https://svn.cs.uu.nl:12443/repos/trace/nix/trunk/"
+
+if ! rev=$(curl --silent -k https://svn.cs.uu.nl:12443/repos/trace/nix/trunk/ \
+ | grep '
Revision' \
+ | sed 's/.*Revision \(.*\):.*/\1/'); \
+ then exit 1; fi
+
+echo "building revision $rev of $url"
+
+echo $rev > head-revision.nix
+
+if ! storeexprs=($(nix-instantiate -vvv do-it.nix)); then exit 1; fi
+
+srcexpr=${storeexprs[0]}
+testexpr=${storeexprs[1]}
+
+if ! nix-store -vvvv -r "$srcexpr" > /dev/null; then exit 1; fi
+
+if ! outpath=$(nix-store -qn "$srcexpr"); then exit 1; fi
+
+uploader="http://losser.st-lab.cs.uu.nl/~eelco/cgi-bin/upload.pl/"
+
+curl --silent -T "$outpath/manual.html" "$uploader" || exit 1
+curl --silent -T "$outpath/style.css" "$uploader" || exit 1
+curl --silent -T "$outpath"/nix-*.tar.bz2 "$uploader" || exit 1
+
+if ! nix-store -vvvv -r "$testexpr" > /dev/null; then exit 1; fi
diff --git a/strategoxt-dist/do-it.nix b/strategoxt-dist/do-it.nix
new file mode 100644
index 00000000000..81f04169bc9
--- /dev/null
+++ b/strategoxt-dist/do-it.nix
@@ -0,0 +1,26 @@
+let {
+ system = "i686-linux";
+ pkgs = (import ../pkgs/system/all-packages.nix) {system = system;};
+ stdenv = pkgs.stdenv_;
+
+ sourcedist = (import ./nix-source-dist.nix) {
+ stdenv = stdenv;
+ autoconf = pkgs.autoconf;
+ automake = pkgs.automake;
+ libxml2 = pkgs.libxml2;
+ libxslt = pkgs.libxslt;
+ docbook_dtd = pkgs.docbook_xml_dtd;
+ docbook_xslt = pkgs.docbook_xml_xslt;
+ fetchurl = pkgs.fetchurl;
+ fetchsvn = pkgs.fetchsvn;
+ rev = import ./head-revision.nix;
+ };
+
+ testbuild = (import ./nix-test-build.nix) {
+ stdenv = stdenv;
+ getopt = pkgs.getopt;
+ src = sourcedist;
+ };
+
+ body = [sourcedist testbuild];
+}
diff --git a/strategoxt-dist/mail-result.sh b/strategoxt-dist/mail-result.sh
new file mode 100755
index 00000000000..f5e94d18bba
--- /dev/null
+++ b/strategoxt-dist/mail-result.sh
@@ -0,0 +1,33 @@
+#! /bin/sh
+
+email=$1
+shift
+
+logfile=/tmp/logfile-$$ # !!! security
+trap "rm $logfile" EXIT
+
+echo $logfile
+
+if ! "$@" > $logfile 2>&1; then
+ BLOCKER=/tmp/inhibit-notify
+ if ! test -f $BLOCKER; then
+ HEAD=`head $logfile`
+ TAIL=`tail $logfile`
+ bzip2 < $logfile > $logfile.bz2
+ mail -s "Nix build failed" -a $logfile.bz2 $email <new->addfile(*FILE)->hexdigest;
+close FILE;
+
+print "Content-Type: text/plain\n\n";
+print "$hash";
diff --git a/strategoxt-dist/server-side/cgi-bin/upload.pl b/strategoxt-dist/server-side/cgi-bin/upload.pl
new file mode 100755
index 00000000000..4d303c77d38
--- /dev/null
+++ b/strategoxt-dist/server-side/cgi-bin/upload.pl
@@ -0,0 +1,23 @@
+#! /usr/bin/perl -w
+
+use strict;
+
+my $uploadpath = $ENV{"PATH_INFO"};
+
+# Sanitise upload path.
+die unless $uploadpath =~ /^(\/[A-Za-z0-9-][A-Za-z0-9-\.]+)+$/;
+
+my $dst = "/home/eelco/public_html/nix/$uploadpath";
+my $tmp = "${dst}_$$";
+
+open OUT, ">$tmp" or die;
+while () {
+ print OUT "$_" or die;
+}
+close OUT or die;
+
+rename $tmp, $dst or die;
+
+print "Content-Type: text/plain\n\n";
+print "upload succesful\n";
+print "upload path: $uploadpath\n";