diff --git a/presentazione/.bowerrc b/presentazione/.bowerrc
new file mode 100644
index 0000000..df4bcee
--- /dev/null
+++ b/presentazione/.bowerrc
@@ -0,0 +1,3 @@
+{
+ "directory": "bower_components"
+}
\ No newline at end of file
diff --git a/presentazione/.editorconfig b/presentazione/.editorconfig
new file mode 100644
index 0000000..0fab135
--- /dev/null
+++ b/presentazione/.editorconfig
@@ -0,0 +1,24 @@
+# EditorConfig helps developers define and maintain consistent
+# coding styles between different editors and IDEs
+# editorconfig.org
+
+root = true
+
+
+[*]
+
+# Change these settings to your own preference
+indent_style = space
+indent_size = 2
+
+# It's recommended to keep these unchanged
+end_of_line = lf
+charset = utf-8
+trim_trailing_whitespace = true
+insert_final_newline = true
+
+[*.jade]
+trim_trailing_whitespace = false
+
+[*.md]
+trim_trailing_whitespace = false
\ No newline at end of file
diff --git a/presentazione/.gitignore b/presentazione/.gitignore
new file mode 100644
index 0000000..a4de5ec
--- /dev/null
+++ b/presentazione/.gitignore
@@ -0,0 +1,4 @@
+node_modules
+bower_components
+dist
+bespoke-theme-*
\ No newline at end of file
diff --git a/presentazione/README.md b/presentazione/README.md
new file mode 100644
index 0000000..97c455a
--- /dev/null
+++ b/presentazione/README.md
@@ -0,0 +1,17 @@
+# Anonimato nella rete Internet
+> A [Bespoke.js](http://markdalgleish.com/projects/bespoke.js) presentation, built with [generator-bespoke](https://github.com/markdalgleish/generator-bespoke)
+
+## View slides locally
+
+First, ensure you have the following installed:
+
+1. [Node.js](http://nodejs.org)
+2. [Bower](http://bower.io): `$ npm install -g bower`
+3. [Gulp](http://gulpjs.com): `$ npm install -g gulp`
+
+Then, install dependencies and run the preview server:
+
+```bash
+$ npm install && bower install
+$ gulp serve
+```
diff --git a/presentazione/bower.json b/presentazione/bower.json
new file mode 100644
index 0000000..8abbf76
--- /dev/null
+++ b/presentazione/bower.json
@@ -0,0 +1,7 @@
+{
+ "name": "presentation-anonimato-nella-rete-internet",
+ "version": "0.0.0",
+ "dependencies": {
+ "prism": "gh-pages"
+ }
+}
\ No newline at end of file
diff --git a/presentazione/gulpfile.js b/presentazione/gulpfile.js
new file mode 100644
index 0000000..a899bc4
--- /dev/null
+++ b/presentazione/gulpfile.js
@@ -0,0 +1,111 @@
+'use strict';
+
+var pkg = require('./package.json'),
+ gulp = require('gulp'),
+ gutil = require('gulp-util'),
+ plumber = require('gulp-plumber'),
+ rename = require('gulp-rename'),
+ connect = require('gulp-connect'),
+ browserify = require('gulp-browserify'),
+ uglify = require('gulp-uglify'),
+ jade = require('gulp-jade'),
+ stylus = require('gulp-stylus'),
+ autoprefixer = require('gulp-autoprefixer'),
+ csso = require('gulp-csso'),
+ del = require('del'),
+ through = require('through'),
+ opn = require('opn'),
+ ghpages = require('gh-pages'),
+ path = require('path'),
+ isDist = process.argv.indexOf('serve') === -1;
+
+gulp.task('js', ['clean:js'], function() {
+ return gulp.src('src/scripts/main.js')
+ .pipe(isDist ? through() : plumber())
+ .pipe(browserify({ transform: ['debowerify'], debug: !isDist }))
+ .pipe(isDist ? uglify() : through())
+ .pipe(rename('build.js'))
+ .pipe(gulp.dest('dist/build'))
+ .pipe(connect.reload());
+});
+
+gulp.task('html', ['clean:html'], function() {
+ return gulp.src('src/index.jade')
+ .pipe(isDist ? through() : plumber())
+ .pipe(jade({ pretty: true }))
+ .pipe(rename('index.html'))
+ .pipe(gulp.dest('dist'))
+ .pipe(connect.reload());
+});
+
+gulp.task('css', ['clean:css'], function() {
+ return gulp.src('src/styles/main.styl')
+ .pipe(isDist ? through() : plumber())
+ .pipe(stylus({
+ // Allow CSS to be imported from node_modules and bower_components
+ 'include css': true,
+ 'paths': ['./node_modules', './bower_components']
+ }))
+ .pipe(autoprefixer('last 2 versions', { map: false }))
+ .pipe(isDist ? csso() : through())
+ .pipe(rename('build.css'))
+ .pipe(gulp.dest('dist/build'))
+ .pipe(connect.reload());
+});
+
+gulp.task('images', ['clean:images'], function() {
+ return gulp.src('src/images/**/*')
+ .pipe(gulp.dest('dist/images'))
+ .pipe(connect.reload());
+});
+
+gulp.task('clean', function(done) {
+ del('dist', done);
+});
+
+gulp.task('clean:html', function(done) {
+ del('dist/index.html', done);
+});
+
+gulp.task('clean:js', function(done) {
+ del('dist/build/build.js', done);
+});
+
+gulp.task('clean:css', function(done) {
+ del('dist/build/build.css', done);
+});
+
+gulp.task('clean:images', function(done) {
+ del('dist/images', done);
+});
+
+gulp.task('connect', ['build'], function() {
+ connect.server({
+ root: 'dist',
+ livereload: true
+ });
+});
+
+gulp.task('open', ['connect'], function (done) {
+ opn('http://localhost:8080', done);
+});
+
+gulp.task('watch', function() {
+ gulp.watch('src/**/*.jade', ['html']);
+ gulp.watch('src/styles/**/*.styl', ['css']);
+ gulp.watch('src/images/**/*', ['images']);
+ gulp.watch([
+ 'src/scripts/**/*.js',
+ 'bespoke-theme-*/dist/*.js' // Allow themes to be developed in parallel
+ ], ['js']);
+});
+
+gulp.task('deploy', ['build'], function(done) {
+ ghpages.publish(path.join(__dirname, 'dist'), { logger: gutil.log }, done);
+});
+
+gulp.task('build', ['js', 'html', 'css', 'images']);
+
+gulp.task('serve', ['open', 'watch']);
+
+gulp.task('default', ['build']);
diff --git a/presentazione/package.json b/presentazione/package.json
new file mode 100644
index 0000000..288688e
--- /dev/null
+++ b/presentazione/package.json
@@ -0,0 +1,37 @@
+{
+ "name": "presentation-anonimato-nella-rete-internet",
+ "version": "0.0.0",
+ "dependencies": {},
+ "devDependencies": {
+ "bespoke": "^1.0.0",
+ "bespoke-backdrop": "^1.0.0",
+ "bespoke-bullets": "^1.0.0",
+ "bespoke-forms": "^1.0.0",
+ "bespoke-hash": "^1.0.0",
+ "bespoke-keys": "^1.0.0",
+ "bespoke-progress": "^1.0.0",
+ "bespoke-scale": "^1.0.0",
+ "bespoke-theme-cube": "^2.0.0",
+ "bespoke-touch": "^1.0.0",
+ "debowerify": "^0.7.1",
+ "del": "^1.1.1",
+ "gh-pages": "^0.2.0",
+ "gulp": "^3.8.1",
+ "gulp-autoprefixer": "0.0.7",
+ "gulp-browserify": "^0.5.0",
+ "gulp-connect": "^2.0.5",
+ "gulp-csso": "^0.2.9",
+ "gulp-jade": "^0.6.0",
+ "gulp-plumber": "^0.6.3",
+ "gulp-rename": "^1.2.0",
+ "gulp-stylus": "^1.0.2",
+ "gulp-uglify": "^0.3.1",
+ "gulp-util": "^2.2.17",
+ "insert-css": "^0.2.0",
+ "opn": "^0.1.2",
+ "through": "^2.3.4"
+ },
+ "engines": {
+ "node": ">=0.10.0"
+ }
+}
\ No newline at end of file
diff --git a/presentazione/src/index.jade b/presentazione/src/index.jade
new file mode 100644
index 0000000..9bb63f8
--- /dev/null
+++ b/presentazione/src/index.jade
@@ -0,0 +1,71 @@
+doctype html
+html
+ head
+ meta(charset='utf-8')
+ meta(name='viewport', content='width=device-width, initial-scale=1, maximum-scale=1')
+ title Anonimato nella rete Internet
+
+ link(rel='stylesheet', type='text/css', href='build/build.css')
+
+ body
+
+ article
+
+ section
+ h1 Anonimato nella rete Internet
+
+ section
+ h2 Keyboard Interaction
+ h3 Powered by bespoke-keys
+
+ section
+ h2 Touch Interaction
+ h3 Powered by bespoke-touch
+
+ section
+ h2 Responsive Slides
+ h3 Powered by bespoke-scale
+
+ section
+ h2 Bullet List
+ h3.bullet Powered by bespoke-bullets
+ ul
+ li Bullet 1
+ li Bullet 2
+ li Bullet 3
+
+ section
+ h2 Syntax Highlighting
+ h3 Powered by Lea Verou's Prism
+ pre
+ code.language-javascript.
+ bespoke.from('article', [
+ classes(),
+ keys(),
+ touch(),
+ bullets('li, .bullet')
+ ]);
+
+ section(data-bespoke-hash='named-route')
+ h2 Named Route
+ h3 Powered by bespoke-hash
+ p Look up! This route has been named with a 'data-bespoke-hash' attribute.
+
+ section.emphatic-text(data-bespoke-backdrop='emphatic')
+ h2 Emphatic Slide!
+ h3 Powered by bespoke-backdrop
+
+ section
+ h2.bullet Just the beginning...
+ br
+ ul
+ li Edit Jade markup in 'src/index.jade'
+ li Edit Stylus styles in 'src/styles/main.styl'
+ li Edit JavaScript in 'src/scripts/main.js'
+ br
+ ul
+ li
+ strong Enjoy! :)
+ a(href='http://twitter.com/markdalgleish') -@markdalgleish
+
+ script(src='build/build.js')
\ No newline at end of file
diff --git a/presentazione/src/scripts/main.js b/presentazione/src/scripts/main.js
new file mode 100644
index 0000000..3675737
--- /dev/null
+++ b/presentazione/src/scripts/main.js
@@ -0,0 +1,30 @@
+// Require Node modules in the browser thanks to Browserify: http://browserify.org
+var bespoke = require('bespoke'),
+ cube = require('bespoke-theme-cube'),
+ keys = require('bespoke-keys'),
+ touch = require('bespoke-touch'),
+ bullets = require('bespoke-bullets'),
+ backdrop = require('bespoke-backdrop'),
+ scale = require('bespoke-scale'),
+ hash = require('bespoke-hash'),
+ progress = require('bespoke-progress'),
+ forms = require('bespoke-forms');
+
+// Bespoke.js
+bespoke.from('article', [
+ cube(),
+ keys(),
+ touch(),
+ bullets('li, .bullet'),
+ backdrop(),
+ scale(),
+ hash(),
+ progress(),
+ forms()
+]);
+
+// Prism syntax highlighting
+// This is actually loaded from "bower_components" thanks to
+// debowerify: https://github.com/eugeneware/debowerify
+require('prism');
+
diff --git a/presentazione/src/styles/main.styl b/presentazione/src/styles/main.styl
new file mode 100644
index 0000000..561c31a
--- /dev/null
+++ b/presentazione/src/styles/main.styl
@@ -0,0 +1,8 @@
+// New to Stylus? Check out http://learnboost.github.io/stylus
+// Use modern CSS thanks to Autoprefixer: https://github.com/ai/autoprefixer
+
+// Import CSS from "node_modules" and "bower_components"
+// thanks to Stylus' "import css" and "paths" options
+
+@import 'prism/themes/prism-okaidia.css'
+// Check out "bower_components/prism/themes/" for available themes