Merge pull request #309 from bigchaindb/fix/build-and-deploy

Fix build & deploy, restore changes
This commit is contained in:
Matthias Kretschmann 2020-05-27 09:47:27 +02:00 committed by GitHub
commit 714319bee0
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
60 changed files with 15783 additions and 1544 deletions

2
.gitignore vendored
View File

@ -1,11 +1,11 @@
node_modules
Gemfile.lock
.jekyll-metadata
.jekyll-cache
_dist
.awspublish*
yarn.lock
.yarnclean
.bundle
vendor/
package-lock.json
*.code-workspace

View File

@ -1,6 +1,6 @@
language: ruby
rvm:
- 2.5
- 2.7
cache:
bundler: true

View File

@ -10,5 +10,4 @@ end
group :jekyll_plugins do
gem 'hash-joiner'
gem 'simple-rss'
end

View File

@ -28,7 +28,7 @@ echo "$(tput sgr0)" # reset
##
if [ "$TRAVIS_PULL_REQUEST" != "false" ] && [ "$TRAVIS_BRANCH" == "master" ]; then
gulp build --staging
npm run build:staging
##
@ -36,11 +36,11 @@ if [ "$TRAVIS_PULL_REQUEST" != "false" ] && [ "$TRAVIS_BRANCH" == "master" ]; th
##
elif [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
gulp build --production
npm run build
else
gulp build --production
npm run build
fi;

View File

@ -14,14 +14,14 @@ set -e;
##
if [ "$TRAVIS_PULL_REQUEST" != "false" ] && [ "$TRAVIS_BRANCH" == "master" ]; then
gulp deploy --beta;
npm run deploy:staging;
##
## check for master push which is no pull request
##
elif [ "$TRAVIS_BRANCH" == "master" ] && [ "$TRAVIS_PULL_REQUEST" == "false" ]; then
gulp deploy --live;
npm run deploy;
else

View File

@ -7,7 +7,6 @@ echo " Installing dependencies "
echo "============================================="
echo "$(tput sgr0)" # reset
npm install gulp@4.0.0 -g
npm install
# Travis does that automatically after selecting ruby

View File

@ -12,12 +12,8 @@ hiring: false
email:
contact: contact@bigchaindb.com
contact_formspree: xgkblajx
contact_cc: "contact@bigchaindb.com"
cla: xwojnopx
cla_cc: "troy@bigchaindb.com,upod-team@bigchaindb.com"
services: mdgvledx
services_cc: "contact@bigchaindb.com"
cla_cc: "upod-team@bigchaindb.com"
gdpr: gdpr@bigchaindb.com
social:
@ -69,14 +65,6 @@ typekitID: fih1ngo
permalink: /:title/
# Content Parsing
# --------------------
markdown: redcarpet
redcarpet:
extensions: ['no_intra_emphasis', 'autolink', 'tables', 'smart', 'hard_wrap', 'fenced_code_blocks', 'strikethrough', 'highlight', 'quote', 'footnotes', 'with_toc_data', 'space_after_headers', 'superscript', 'lax_spacing']
# Generator
# --------------------
source: ./_src

View File

@ -1,5 +1,4 @@
//=include svg4everybody/dist/svg4everybody.js
//=include jquery/dist/jquery.js
//=include smooth-scroll/dist/smooth-scroll.js
//=include cookies-eu-banner/dist/cookies-eu-banner.js

View File

@ -135,36 +135,12 @@ var GoogleAnalytics = (function(w,d,$) {
// All custom events
//
// newsletter forms
gaEventNewsletterSuccess: function() {
ga('send', 'event', 'newsletter', 'subscribe', 'success');
},
gaEventNewsletterError: function() {
ga('send', 'event', 'newsletter', 'subscribe', 'error');
},
// contact forms
gaEventContactSuccess: function() {
ga('send', 'event', 'contact', 'contact_form', 'success');
},
gaEventContactError: function() {
ga('send', 'event', 'contact', 'contact_form', 'error');
},
// CLA forms
gaEventClaSuccess: function() {
ga('send', 'event', 'cla', 'cla_form', 'success');
},
gaEventClaError: function() {
ga('send', 'event', 'cla', 'cla_form', 'error');
},
// Services form
gaEventServicesSuccess: function() {
ga('send', 'event', 'services', 'services_form', 'success');
},
gaEventServicesError: function() {
ga('send', 'event', 'services', 'services_form', 'error');
}
};

View File

@ -1,66 +0,0 @@
var FormContact = (function(w, d, $) {
'use strict';
var app, _private, _config;
_config = {
form: $('#form-contact'),
formBtn: $('#form-contact').find('.btn'),
formURL: $('#form-contact').attr('action'),
formMethod: $('#form-contact').attr('method')
};
_private = {
formSubmit: function() {
_config.form.submit(function(e) {
e.preventDefault();
if ( $(this).parsley().isValid() ) {
$.ajax({
url: _config.formURL,
method: _config.formMethod,
data: $(this).serialize(),
dataType: 'json',
beforeSend: function() {
_config.formBtn
.addClass('disabled')
.attr('value', 'Sending...');
},
success: function(data) {
_config.form.find('.form-group').addClass('hide');
_config.form.find('.alert--success').removeClass('hide');
_config.formBtn.removeClass('disabled');
// send GA event
if (!_dntEnabled()) {
GoogleAnalytics.gaEventContactSuccess();
}
},
error: function(err) {
_config.form.find('.alert--danger').removeClass('hide');
_config.formBtn
.removeClass('disabled')
.attr('value', 'Send');
// send GA event
if (!_dntEnabled()) {
GoogleAnalytics.gaEventContactError();
}
}
});
}
});
}
};
app = {
init: function() {
_private.formSubmit();
}
};
return app;
})(window, document, jQuery);

View File

@ -1,66 +0,0 @@
var FormServices = (function(w, d, $) {
'use strict';
var app, _private, _config;
_config = {
form: $('#form-services'),
formBtn: $('#form-services').find('.btn'),
formURL: $('#form-services').attr('action'),
formMethod: $('#form-services').attr('method')
};
_private = {
formSubmit: function() {
_config.form.submit(function(e) {
e.preventDefault();
if ( $(this).parsley().isValid() ) {
$.ajax({
url: _config.formURL,
method: _config.formMethod,
data: $(this).serialize(),
dataType: 'json',
beforeSend: function() {
_config.formBtn
.addClass('disabled')
.attr('value', 'Sending...');
},
success: function(data) {
_config.form.find('.form-group').addClass('hide');
_config.form.find('.alert--success').removeClass('hide');
_config.formBtn.removeClass('disabled');
// send GA event
if (!_dntEnabled()) {
GoogleAnalytics.gaEventServicesSuccess();
}
},
error: function(err) {
_config.form.find('.alert--danger').removeClass('hide');
_config.formBtn
.removeClass('disabled')
.attr('value', 'Send');
// send GA event
if (!_dntEnabled()) {
GoogleAnalytics.gaEventServicesError();
}
}
});
}
});
}
};
app = {
init: function() {
_private.formSubmit()
}
};
return app;
})(window, document, jQuery)

View File

@ -1,45 +0,0 @@
var HeroVideo = (function(w, d, $) {
'use strict'
var app, _private, _config
_config = {
heroVideo: $('.hero-video__video').get(0),
minWidth: 720 // $screen-md
}
_private = {
play: function() {
if ( _config.heroVideo.paused ) {
if ( _config.heroVideo.readyState < 4 ) {
_config.heroVideo.load();
}
_config.heroVideo.play();
$(_config.heroVideo).addClass('enabled').removeClass('hide');
}
},
pause: function() {
_config.heroVideo.pause();
$(_config.heroVideo).addClass('hide').removeClass('enabled');
},
isWide: function() {
return $(window).width() >= _config.minWidth;
},
}
app = {
init: function() {
$(window).on('load resize', function() {
if (_private.isWide()) {
_private.play()
} else {
_private.pause()
}
})
}
}
return app
})(window, document, jQuery)

View File

@ -1,39 +0,0 @@
document.addEventListener('DOMContentLoaded', function() {
const url = 'https://bigchaindb-meetups.now.sh'
function injectData(data) {
const events = data
// just grab the first item of array
const nextEvent = events[0]
const element = document.getElementsByClassName('js-social-link--meetup')[0]
if (nextEvent) {
const name = nextEvent.name
const link = nextEvent.link
const date = new Date(nextEvent.time).toLocaleDateString('en-us', {
month: 'short',
day: 'numeric'
})
const elementTitle = document.getElementsByClassName('meetup-title')[0]
elementTitle.innerHTML = `<span class="hero__community__label">${date}</span><strong> ${name}</strong>`
elementTitle.style.opacity = 1
element.href = link
} else {
element.classList.add('hide')
}
}
fetch(url)
.then(function(response) {
return response.json()
})
.then(function(data) {
injectData(data)
})
.catch(function(error) {
console.log(error)
})
})

View File

@ -1,53 +0,0 @@
//=include vendor/jquery.ajaxchimp.js
var Newsletter = (function(w, d, $) {
'use strict';
var app, _private, _config;
_config = {
newsletter: $('#newsletter')
},
_private = {
ajaxChimp: function() {
_config.newsletter.ajaxChimp({
callback: formCallback
});
function formCallback (resp) {
if (resp.result === 'success') {
_config.newsletter.find('.input-group').addClass('hide');
// send GA event
if (!_dntEnabled()) {
GoogleAnalytics.gaEventNewsletterSuccess();
}
}
if (resp.result === 'error') {
_config.newsletter.find('.btn')
.removeClass('disabled')
.text('Subscribe');
// send GA event
if (!_dntEnabled()) {
GoogleAnalytics.gaEventNewsletterError();
}
}
}
}
};
app = {
init: function() {
_private.ajaxChimp();
}
};
return app;
})(window, document, jQuery);

View File

@ -1,8 +0,0 @@
//=include bigchain/form-contact.js
jQuery(function($) {
// init form
FormContact.init()
});

View File

@ -1,9 +1,7 @@
//=include bigchain/newsletter.js
//=include bigchain/github.js
//=include bigchain/meetup.js
jQuery(function($) {
// jQuery(function($) {
Newsletter.init()
})
// })

View File

@ -1,25 +1,19 @@
//=include gumshoejs/dist/gumshoe.js
//=include bigchain/tab.js
//=include bigchain/newsletter.js
const bigchaindbUrl = 'https://test.bigchaindb.com'
const apiPath = '/api/v1/'
jQuery(function ($) {
// jQuery(function ($) {
//
// init modules
//
Newsletter.init()
})
// })
//
// Scrollspy
//
gumshoe.init()
var spy = new Gumshoe('#gumshoe a');
//

View File

@ -7,13 +7,14 @@ document.addEventListener('DOMContentLoaded', (event) => {
const successImage = '<svg xmlns="http://www.w3.org/2000/svg" width="64" height="64" viewBox="0 0 64 64"><path d="M2.12132034,39.4786797 C0.949747468,38.3071068 -0.949747468,38.3071068 -2.12132034,39.4786797 C-3.29289322,40.6502525 -3.29289322,42.5497475 -2.12132034,43.7213203 L14.2786797,60.1213203 C15.5878487,61.4304894 17.7587151,61.2529588 18.8377878,59.7484823 L60.4377878,1.74848232 C61.403448,0.402129267 61.0948354,-1.47212773 59.7484823,-2.43778785 C58.4021293,-3.40344797 56.5278723,-3.09483537 55.5622122,-1.74848232 L16.0221415,53.3795008 L2.12132034,39.4786797 Z" transform="translate(3 3)"/></svg>'
const clipboardButton = `<button class="btn btn--clipboard" title="Copy to clipboard">${clipboardImage}</button>`
const codeBlocks = document.querySelectorAll('.highlight')
const codeBlocks = document.querySelectorAll('div.highlighter-rouge')
codeBlocks.forEach(codeBlock => {
const language = codeBlock.getElementsByTagName('code')[0].dataset.lang
codeBlock.insertAdjacentHTML('afterbegin', clipboardButton)
const language = codeBlock.className.split(' ')[0].replace('language-', '')
codeBlock.insertAdjacentHTML('afterbegin', `<h6 class="highlight__title">${language}</h6>`)
const pre = codeBlock.querySelectorAll('div.highlight')[0]
pre.insertAdjacentHTML('afterbegin', clipboardButton)
})
const buttons = document.querySelectorAll('.highlight .btn--clipboard')

View File

@ -1,6 +0,0 @@
//=include bigchain/form-services.js
jQuery(function($) {
FormServices.init()
})

View File

@ -1,10 +0,0 @@
//=include bigchain/newsletter.js
jQuery(function($) {
//
// init modules
//
Newsletter.init()
});

View File

@ -1,158 +0,0 @@
/*!
Mailchimp Ajax Submit
jQuery Plugin
Author: Siddharth Doshi
URL: https://github.com/scdoshi/jquery-ajaxchimp
---
Modified by: Matthias Kretschmann
- changes to work with our form control feedback styles
- changes to work with our parsley form validation
---
Use:
===
$('#form_id').ajaxchimp(options);
- Form should have one <input> element with attribute 'type=email'
- Form should have one label element with attribute 'for=email_input_id' (used to display error/success message)
- All options are optional.
Options:
=======
options = {
language: 'en',
callback: callbackFunction,
url: 'http://blahblah.us1.list-manage.com/subscribe/post?u=5afsdhfuhdsiufdba6f8802&id=4djhfdsh99f'
}
Notes:
=====
To get the mailchimp JSONP url (undocumented), change 'post?' to 'post-json?' and add '&c=?' to the end.
For e.g. 'http://blahblah.us1.list-manage.com/subscribe/post-json?u=5afsdhfuhdsiufdba6f8802&id=4djhfdsh99f&c=?',
*/
(function ($) {
'use strict';
$.ajaxChimp = {
responses: {
'We have sent you a confirmation email' : 0,
'Please enter a value' : 1,
'An email address must contain a single @' : 2,
'The domain portion of the email address is invalid (the portion after the @: )' : 3,
'The username portion of the email address is invalid (the portion before the @: )' : 4,
'This email address looks fake or invalid. Please enter a real email address' : 5
},
translations: {
'en': null
},
init: function (selector, options) {
$(selector).ajaxChimp(options);
}
};
$.fn.ajaxChimp = function (options) {
$(this).each(function(i, elem) {
var form = $(elem);
var email = form.find('input[type=email]');
var feedback = form.find('.form-control-feedback');
var formgroup = form.find('.input-group');
var settings = $.extend({
'url': form.attr('action'),
'language': 'en'
}, options);
var url = settings.url.replace('/post?', '/post-json?').concat('&c=?');
form.attr('novalidate', 'true');
email.attr('name', 'EMAIL');
form.submit(function () {
var msg;
function successCallback(resp) {
if (resp.result === 'success') {
msg = 'We have sent you a confirmation email';
formgroup.removeClass('has-error').addClass('has-success');
} else {
formgroup.removeClass('has-success').addClass('has-error');
email.removeClass('parsley-success');
var index = -1;
try {
var parts = resp.msg.split(' - ', 2);
if (parts[1] === undefined) {
msg = resp.msg;
} else {
var i = parseInt(parts[0], 10);
if (i.toString() === parts[0]) {
index = parts[0];
msg = parts[1];
} else {
index = -1;
msg = resp.msg;
}
}
}
catch (e) {
index = -1;
msg = resp.msg;
}
}
// Translate and display message
if (
settings.language !== 'en'
&& $.ajaxChimp.responses[msg] !== undefined
&& $.ajaxChimp.translations
&& $.ajaxChimp.translations[settings.language]
&& $.ajaxChimp.translations[settings.language][$.ajaxChimp.responses[msg]]
) {
msg = $.ajaxChimp.translations[settings.language][$.ajaxChimp.responses[msg]];
}
feedback.html(msg);
feedback.show(2000);
if (settings.callback) {
settings.callback(resp);
}
}
var data = {};
var dataArray = form.serializeArray();
$.each(dataArray, function (index, item) {
data[item.name] = item.value;
});
$.ajax({
url: url,
data: data,
success: successCallback,
dataType: 'jsonp',
error: function (resp, text) {
console.log('mailchimp ajax submit error: ' + text);
}
});
// Translate and display submit message
var submitMsg = 'Sending...';
if(
settings.language !== 'en'
&& $.ajaxChimp.translations
&& $.ajaxChimp.translations[settings.language]
&& $.ajaxChimp.translations[settings.language]['submit']
) {
submitMsg = $.ajaxChimp.translations[settings.language]['submit'];
}
form.find('.btn')
.addClass('disabled')
.text(submitMsg);
//feedback.html(submitMsg).show(2000);
return false;
});
});
return this;
};
})(jQuery);

View File

@ -6,7 +6,6 @@
.page-front {
.section--guides,
.section--blog,
.section-testimonials {
@extend .background--darker;
}

View File

@ -1,63 +0,0 @@
.page-newsletter {
.content--page--markdown {
padding-top: 0;
padding-bottom: 0;
}
.section--newsletter {
width: 100vw;
position: relative;
left: 50%;
right: 50%;
margin-left: -50vw;
margin-right: -50vw;
display: flex;
align-items: center;
min-height: 60vh;
background: darken($body-bg, 5%);
.form-control {
border-color: $gray-light;
&:focus {
border-color: #fff;
}
}
.btn {
@extend .btn-primary;
}
.newsletter__title {
color: $brand-main-blue-light;
}
// stylelint-disable selector-max-compound-selectors,max-nesting-depth
.form-label,
.form-control,
.form-control:focus ~ .form-label,
.newsletter__text,
.newsletter__gdpr {
color: $text-color;
}
.newsletter__gdpr {
opacity: .6;
.icon {
stroke: $gray-light;
color: $gray-light;
}
a {
box-shadow: inset 0 -1px 0 $gray-light;
&:hover,
&:focus {
background: $gray-light;
}
}
}
// stylelint-enable selector-max-compound-selectors,max-nesting-depth
}
}

View File

@ -1,142 +0,0 @@
//
// Page: Services
// ---
// bigchaindb.com
//
.page-services {
// Different Features unit layout
.feature {
display: block;
}
.feature__title {
margin-bottom: $spacer;
display: block;
// the bottom line
&:after {
content: '';
height: 2px;
width: 3rem;
display: block;
margin-top: $spacer * $line-height;
}
}
.feature__icon {
margin-top: 0;
margin-bottom: $spacer / 6;
width: 2.2rem;
height: 2.2rem;
}
}
.hero--services {
.logo--services {
display: inline-block;
opacity: .75;
fill: $brand-main-blue-light;
}
.hero__title {
margin-top: $spacer;
}
.hero__subtitle {
margin-bottom: $spacer * 3;
font-size: $font-size-h5;
@media ($screen-sm) {
font-size: $font-size-h4;
}
}
.hero__content {
margin-top: $spacer * 2;
margin-bottom: $spacer * 6;
}
.btn {
min-width: 220px;
}
}
.section--servicesdetail {
.feature__icon {
stroke: rgba($brand-main-gray, .65);
color: rgba($brand-main-violet, .65);
}
.feature__title {
// the bottom line
&:after {
background: rgba($brand-main-gray, .2);
}
}
.feature__text {
color: rgba($brand-main-blue, .65);
}
.actions {
text-align: center;
padding-top: $spacer * 3;
border-top: 2px solid rgba($brand-main-gray, .1);
}
}
.section--servicesintro {
.grid,
.feature {
margin-bottom: 0;
}
.btn {
margin-top: $spacer * 2;
}
h2 {
@extend .h3;
margin-bottom: $spacer;
}
.feature__title {
// the bottom line
&:after {
background: rgba($gray-light, .4);
}
}
}
.section--servicestestimonial {
.testimonial {
@extend .large;
margin: 0 auto;
@media ($screen-sm) {
max-width: 66%;
}
}
.testimonial__quote {
&:before {
margin-left: -1.3rem;
}
}
}
.form--services {
background: darken($brand-main-blue, 5%);
.grid {
@media ($screen-sm) {
justify-content: space-between;
}
}
.grid__col {
@media ($screen-sm) {
flex-basis: 48%;
}
}
}

View File

@ -86,8 +86,5 @@
// Specific sections
//
@import '_sections/section-cta-whitepaper';
@import '_sections/section-cta-services';
@import '_sections/section-partners';
@import '_sections/section-blog';
@import '_sections/section-getstarted';
@import '_sections/section-newsletter';

View File

@ -1,31 +0,0 @@
.article {
@include color-overlay;
@include transition;
background-size: cover;
background-position: center;
padding: $spacer;
border-radius: $border-radius;
overflow: hidden;
box-shadow: none;
display: flex;
align-items: center;
min-height: 8rem;
&:hover,
&:focus {
background-size: cover;
background-position: center;
box-shadow: 0 2px 5px rgba($brand-main-blue-dark, .2);
transform: translateY(-1px);
}
}
.article__title,
h1.article__title {
font-size: $font-size-lg;
font-weight: $font-weight-normal;
margin: 0;
color: #fff;
position: relative;
z-index: 1;
}

View File

@ -1,28 +0,0 @@
.section-cta--services {
@media ($screen-md) {
padding-top: $spacer * 7;
padding-bottom: $spacer * 7;
}
.logo--services {
margin-bottom: $spacer;
transform: scale(.8);
transform-origin: left;
color: $brand-main-violet;
fill: rgba($brand-main-blue, .5);
}
.section-header {
margin-bottom: 0;
}
.section-title {
text-align: left;
margin-bottom: $spacer * 2.5;
&:after {
display: none;
}
}
}

View File

@ -1,75 +0,0 @@
.section--newsletter {
background: $brand-primary;
align-items: flex-start;
.form-group,
.grid { margin-bottom: 0; }
.form-control {
border-color: $gray-dark;
&:focus {
border-color: #000;
}
&.parsley-error {
border-color: $brand-danger !important; // stylelint-disable-line
}
}
.btn {
background: $brand-main-blue;
}
.form-label,
.form-control,
.form-control:focus ~ .form-label {
color: $gray-dark;
}
.form-control-feedback {
@extend .bold;
margin-top: $spacer / 2;
}
.form--newsletter {
margin-top: $spacer * 2;
}
.parsley-errors-list {
right: auto;
left: 0;
bottom: -.25rem;
}
}
.newsletter__title {
@extend .h5;
margin-top: 0;
margin-bottom: $spacer / 4;
}
.newsletter__title,
.newsletter__text,
.newsletter__gdpr {
color: $gray-dark;
}
.newsletter__gdpr {
opacity: .8;
.icon {
stroke: $brand-main-blue;
color: $brand-main-blue;
}
a {
box-shadow: inset 0 -1px 0 $brand-main-blue;
&:hover,
&:focus {
background: $brand-main-blue;
}
}
}

View File

@ -62,7 +62,5 @@
@import 'page-contact';
@import 'page-cla';
@import 'page-partners';
@import 'page-services';
@import 'oceanprotocol';
@import 'page-guide';
@import 'page-newsletter';

View File

@ -77,8 +77,9 @@ pre {
.btn--clipboard,
.success__text {
position: absolute;
top: $spacer * 1.65;
top: .1rem;
right: .1rem;
z-index: 10;
}
.success__text {

View File

@ -34,7 +34,7 @@ $brand-danger: #c9726a !default;
// Typography
//
$font-family-base: 'europa', 'Avenir Next', 'Avenir', 'Helvetica Neue', 'Helvetica', 'Arial', sans-serif !default;
$font-family-monospace: Menlo, Monaco, Consolas, 'Courier New', monospace !default;
$font-family-monospace: menlo, monaco, consolas, 'Courier New', monospace !default;
$font-weight-light: 300 !default;
$font-weight-normal: 400 !default;

View File

@ -5,11 +5,5 @@ general: >
We use Formspree & Zapier to send this form and by submitting it, you acknowledge that the information you provide will be transferred to Formspree ([Privacy Policy](https://formspree.io/static/PrivacyPolicy.pdf)) & Zapier ([Privacy Policy](https://zapier.com/privacy/)) for processing. Don't want that? Send us an email at contact@bigchaindb.com.
newsletter: >
We will only use your email to send you our newsletter and by submitting this form you give us permission to do so. You can change your mind at any time by clicking the unsubscribe link of any newsletter you receive from us, deleting your data in the process. For more information visit our [Privacy Policy](/privacy/).
We use MailChimp for our newsletter and by submitting this form, you acknowledge that the information you provide will be transferred to MailChimp for processing in accordance with their their [Terms](https://mailchimp.com/legal/terms/) and [Privacy Policy](https://mailchimp.com/legal/privacy/).
cookies: >
By continuing your visit to this site, you accept the use of cookies from Google Analytics so we can improve the site for you.

View File

@ -12,8 +12,6 @@ main:
- title: Docs
url: https://docs.bigchaindb.com/
external: true
- title: Services
url: /services/
secondary:
- title: About
@ -26,8 +24,6 @@ secondary:
url: "/contact/"
community:
- title: Gitter
url: https://gitter.im/bigchaindb/bigchaindb
- title: GitHub
url: https://github.com/bigchaindb
- title: Twitter

View File

@ -6,7 +6,7 @@
<svg class="oceanprotocol__logo">
<use xlink:href="/assets/img/sprite.svg#logo-oceanprotocol"></use>
</svg>
Meet Ocean. A Decentralized Data Exchange Protocol</h1>
BigchainDB GmbH (the company) works on Ocean Protocol. IPDB Foundation (ipdb.io) oversees BigchainDB software and networks.</h1>
</div>
</a>

View File

@ -1,53 +0,0 @@
<form id="form-contact" class="form js-parsley" action="//formspree.io/{{ site.email.contact_formspree }}" method="POST" accept-charset="UTF-8">
<p class="form-group">
<input class="form-control" type="text" id="name" name="name" required>
<label class="form-label" for="name">Your Name</label>
</p>
<p class="form-group">
<input class="form-control" type="email" id="email" name="_replyto" required>
<label class="form-label" for="email">Your Email</label>
</p>
<p class="form-group">
<textarea class="form-control" id="comment" name="comment" rows="1" required></textarea>
<label class="form-label" for="comment">Your Message</label>
</p>
<p class="form-group text-dimmed mini">
Fields marked with an <span class="required">*</span> are required.
</p>
<p class="form-group">
<input class="btn btn-primary" type="submit" value="Send">
</p>
<div class="alert alert--success animation-slide-in-from-bottom hide">
<svg class="alert__icon icon icon-success">
<use xlink:href="/assets/img/sprite.svg#icon-check"></use>
</svg>
<p>
<strong class="alert__title">Great to hear youre interested!</strong>
Well get in touch soon.
</p>
</div>
<div class="alert alert--danger hide">
<svg class="alert__icon icon icon-fail">
<use xlink:href="/assets/img/sprite.svg#icon-fail"></use>
</svg>
<p>
<strong class="alert__title">Ops, there was an error</strong>
Would you mind trying again?
</p>
</div>
<input type="text" name="_gotcha" style="display: none;">
<input type="hidden" name="_subject" value="New contact form submission" />
<input type="hidden" name="_cc" value="{{ site.email.contact_cc }}" />
<div class="form__gdpr">
<svg class="icon">
<use xlink:href="/assets/img/sprite.svg#icon-heart-protect"></use>
</svg>
<div class="text">
{{ site.data.gdpr.general | markdownify }}
</div>
</div>
</form>

View File

@ -1,23 +0,0 @@
<form id="newsletter"
class="form--newsletter js-parsley"
action="https://bigchaindb.us9.list-manage.com/subscribe/post?u=56f2d3da26a7d407177d3fba3&amp;id=0a99a9481e"
method="post">
<div class="form-group has-feedback">
<div class="input-group">
<input class="form-control" type="email" id="email" name="EMAIL" required>
<label class="form-label" for="email">Your Email</label>
<span class="input-group-btn">
<button class="btn btn-blue" type="submit" name="button">
Subscribe
</button>
</span>
<input type="hidden" name="GDPR" value="yes" />
</div>
<div class="form-control-feedback"></div>
</div>
</form>

View File

@ -1,116 +0,0 @@
<form id="form-services" class="form form--services js-parsley" action="https://formspree.io/{{ site.email.services }}" method="POST" accept-charset="UTF-8">
<p class="form-group">
<input class="form-control" type="text" id="name" name="name" required>
<label class="form-label" for="name">Full Name</label>
</p>
<div class="grid grid--full grid-small--half">
<div class="grid__col">
<p class="form-group">
<input class="form-control" type="text" id="company" name="company" required>
<label class="form-label" for="company">Company</label>
</p>
</div>
<div class="grid__col">
<p class="form-group">
<input class="form-control" type="email" id="email" name="_replyto" required>
<label class="form-label" for="email">Email</label>
</p>
</div>
<div class="grid__col">
<p class="form-group">
<input class="form-control" type="tel" id="phone" name="phone">
<label class="form-label" for="phone">Phone</label>
</p>
</div>
<div class="grid__col">
<p class="form-group">
<select class="form-control" id="country" name="country" required data-required="true">
<option value="">&nbsp;</option>
<optgroup label="">
<option value="US">United States</option>
<option value="DE">Germany</option>
<option value="IN">India</option>
<option value="GB">United Kingdom</option>
<option value="CN">China</option>
</optgroup>
<option value="">&nbsp;</option>
{% for country in site.data.countries %}
{% unless country.cca2 == 'DE' or country.cca2 == 'US' or country.cca2 == 'IN' or country.cca2 == 'GB' or country.cca2 == 'CN' %}
<option value="{{ country.cca2 }}">{{ country.name.common }}</option>
{% endunless %}
{% endfor %}
</select>
<label class="form-label" for="country">Country</label>
</p>
</div>
<div class="grid__col">
<p class="form-group">
<select class="form-control" id="industry" name="industry" required data-required="true">
<option value="">&nbsp;</option>
{% for industry in page.contact.industries %}
<option value="{{ industry }}">{{ industry }}</option>
{% endfor %}
</select>
<label class="form-label" for="industry">Industry</label>
</p>
</div>
<div class="grid__col">
<p class="form-group">
<select class="form-control" id="interest" name="interest" required data-required="true">
<option value="">&nbsp;</option>
{% for interest in page.contact.interests %}
<option value="{{ interest }}">{{ interest }}</option>
{% endfor %}
</select>
<label class="form-label" for="interest">Interested in</label>
</p>
</div>
</div>
<p class="form-group">
<textarea class="form-control" id="comment" name="comment" rows="1"></textarea>
<label class="form-label" for="comment">Comments</label>
</p>
<p class="form-group text-dimmed mini">
Fields marked with <span class="required">*</span> are required.
</p>
<p class="form-group">
<input class="btn btn-blue-light" type="submit" value="Send">
</p>
<div class="alert alert--success animation-slide-in-from-bottom hide">
<svg class="alert__icon icon icon-success">
<use xlink:href="/assets/img/sprite.svg#icon-check"></use>
</svg>
<p>
<strong class="alert__title">Great to hear youre interested!</strong>
Well get in touch soon.
</p>
</div>
<div class="alert alert--danger hide">
<svg class="alert__icon icon icon-fail">
<use xlink:href="/assets/img/sprite.svg#icon-fail"></use>
</svg>
<p>
<strong class="alert__title">Ops, there was an error</strong>
Would you mind trying again?
</p>
</div>
<input type="text" name="_gotcha" style="display: none;">
<input type="hidden" name="_subject" value="New services form submission" />
<input type="hidden" name="_cc" value="{{ site.email.services_cc }}" />
<div class="form__gdpr">
<svg class="icon">
<use xlink:href="/assets/img/sprite.svg#icon-heart-protect"></use>
</svg>
<div class="text">
{{ site.data.gdpr.general | markdownify }}
</div>
</div>
</form>

View File

@ -20,26 +20,6 @@
<use xlink:href="/assets/img/sprite.svg#github"></use>
</svg> Star <span class="stars" id="stars"></span>
</a>
<a class="social-link btn btn-text btn-sm js-social-link" href="{{ site.social.twitter.url }}" title="Follow on Twitter">
<svg class="icon icon--social icon--twitter" aria-labelledby="title">
<title>Twitter</title>
<use xlink:href="/assets/img/sprite.svg#twitter"></use>
</svg> Follow
</a>
<a class="social-link btn btn-text btn-sm js-social-link" href="{{ site.social.gitter.url }}" title="Chat on Gitter">
<svg class="icon icon--social icon--gitter" aria-labelledby="title">
<title>Gitter</title>
<use xlink:href="/assets/img/sprite.svg#gitter"></use>
</svg> Chat
</a>
<a class="social-link btn btn-text btn-sm js-social-link js-social-link--meetup" href="{{ site.social.meetup.url }}">
<svg class="icon icon--social icon--meetup">
<use xlink:href="/assets/img/sprite.svg#meetup"></use>
</svg> <span class="meetup-title">BigchainDB Meetup</span>
</a>
</div>
</aside>

View File

@ -11,12 +11,6 @@
<script src="/assets/js/{{ layout.js }}"></script>
{% endif %}
<!--
svg4everybody.js
-->
<script>svg4everybody();</script>
<!--
//
// Google Analytics

View File

@ -1,27 +0,0 @@
<section class="section section--blog ">
<div class="row row--wide">
<header class="section-header">
<h1 class="section-title">The BigchainDB Blog</h1>
<p class="section-description">Updates, stories and ideas from the people behind BigchainDB.</p>
</header>
<div class="grid grid--full grid-small--half grid-medium--third grid--gutters--small">
{% for article in site.articles | limit: 6 %}
<div class="grid__col">
<a class="article article--{{ article.title | downcase | truncatewords: 3, '' | replace: ' ', '-' }}" href="{{ article.link }}" style="background-image: url('{{ article.image }}');">
<h1 class="article__title">
{{ article.title }}
</h1>
</a>
</div>
{% endfor %}
</div>
<p class="text-center">
<a class="btn btn-secondary" href="{{ site.social.medium.url }}">Go to blog</a>
</p>
</div>
</section>

View File

@ -1,17 +0,0 @@
<section class="section section-cta section-cta--services background--blue--light">
<div class="row">
<header class="section-header">
<svg class="logo logo--services logo--white" aria-labelledby="title">
<title>Logo BigchainDB Services</title>
<use xlink:href="/assets/img/sprite.svg#logo-services"></use>
</svg>
<h1 class="section-title">Hands-on consulting and production support by blockchain experts.</h1>
</header>
<a class="btn btn-blue" href="{% link services.html %}">
Explore Services
</a>
</div>
</section>

View File

@ -1,38 +0,0 @@
<section class="section section--newsletter">
<div class="row row--wide">
<div class="grid grid--full grid-medium--half grid--gutters grid--center">
<div class="grid__col">
<h1 class="newsletter__title">
{% if page.newsletter.title %}
{{ page.newsletter.title }}
{% else %}
Get updates delivered to your inbox
{% endif %}
</h1>
<p class="newsletter__text">
{% if page.newsletter.text %}
{{ page.newsletter.text }}
{% else %}
No more than one email per month. We're busy too.
{% endif %}
</p>
{% include form-newsletter.html %}
</div>
<div class="grid__col">
<div class="form__gdpr newsletter__gdpr">
<svg class="icon">
<use xlink:href="/assets/img/sprite.svg#icon-heart-protect"></use>
</svg>
<div class="text">
{{ site.data.gdpr.newsletter | markdownify }}
</div>
</div>
</div>
</div>
</div>
</section>

View File

@ -30,7 +30,7 @@ partners:
{% if page.partners.description %}
{{ page.partners.description }}
{% else %}
We are proud to partner and collaborate with
Partnerships and collaborations have included
{% endif %}
</p>
</header>

View File

@ -13,9 +13,9 @@
</div>
<![endif]-->
{{ content }}
{% include banner.html %}
{{ content }}
{% include footer.html %}

View File

@ -20,5 +20,4 @@ layout: base
{% if page.path contains "whitepaper" %}
{% include sections/section-whitepaper-download.html %}
{% include sections/section-newsletter.html %}
{% endif %}

View File

@ -29,6 +29,4 @@ cta:
</section>
{% include sections/section-cta-services.html %}
{% include sections/section-cta.html %}

View File

@ -89,6 +89,4 @@ cta:
</section>
{% include sections/section-cta-services.html %}
{% include sections/section-cta.html %}

View File

@ -1,42 +0,0 @@
# http://stackoverflow.com/a/27850727/733677
require 'open-uri'
require 'rss'
require 'simple-rss'
module Jekyll
# Runs during jekyll build
class RssFeedCollector < Generator
safe true
priority :high
def generate(site)
rss_items = SimpleRSS.parse open('https://blog.bigchaindb.com/feed/')
# Create a new on-the-fly Jekyll collection called "articles"
jekyll_items = Jekyll::Collection.new(site, 'articles')
site.collections['articles'] = jekyll_items
# Add fake virtual documents to the collection
rss_items.items.each do |item|
title = item.title
link = item.link
# Medium hack: get first image in content, then get smaller image size
image = item.content_encoded[/img.*?src="(.*?)"/i,1].gsub(/max\/(.*)\//, "max/500/")
path = '_articles/' + title.to_s.gsub(':','_') + '.md'
path = site.in_source_dir(path)
doc = Jekyll::Document.new(path, site: site, collection: jekyll_items)
doc.data['title'] = title
doc.data['link'] = link
doc.data['image'] = image
jekyll_items.docs << doc
end
rescue
puts "Could not parse blog feed. Are you offline?"
end
end
end

View File

@ -15,16 +15,22 @@ mediakit:
link: /mediakit.zip
intro: >
BigchainDB is a blockchain database offering decentralization, immutability and native assets. BigchainDB allows for the deployment of large-scale applications in a variety of use cases and industries from intellectual property and identity to supply chain, IoT and artificial intelligence. BigchainDB provides unique solutions for developers, start-ups and enterprises to successfully build their concepts, platforms and applications as big as they can dream.
BigchainDB is a blockchain database offering decentralization, immutability and native assets. BigchainDB allows for the deployment of large-scale applications in a variety of use cases and industries from intellectual property and identity to supply chain, and Internet-of-Things.
---
## Our story
In the summer of 2013, we started working on a project that became ascribe, blockchain-based intellectual property (IP) attribution. We asked the question: how can creators of any digital IP get compensated? Why not own digital art the way you own Bitcoin? With a public store of attribution and provenance, blockchain technology could solve this. So we raised some money, hired a few early employees and kept working on the product until we were satisfied enough to release it, built on the Bitcoin blockchain. The product was basically in shape to serve larger-scale customers, with the glaring exception of the blockchain scalability. We found ourselves needing to turn down opportunities knowing that the Bitcoin blockchain wouldnt be able to handle the throughput we needed to serve larger enterprises.
In summer 2013, we started working on a project that became [ascribe](www.ascribe.io). It started with problems in the art world: "how do you collect digital art?" and "how do digital artists get paid?". To address this, we wondered aloud: "what if you could own digital art the way you own Bitcoin?" We pulled on this thread further; the idea made sense. So we built early prototypes, raised money, hired a few early employees, and improved the product. We released in beta in 2014, and production in early 2015. We built on the Bitcoin blockchain. Alas, its scalability issues prevented us from serving larger customers.
With this as a starting point, we asked how do we “blockchain-ify” it? We drew on our experience in shipping blockchain products to define three specific characteristics: decentralized, immutable and the ability to register and transfer assets. With the definitions above as a starting point, we chose an enterprise-class distributed database and then built our own technology on top of that, adding those three key characteristics while improving base functionality, fault tolerance much more. See our [roadmap](https://github.com/bigchaindb/org/blob/master/ROADMAP.md).
We observed that MongoDB and other distributed databases (DBs) were powering webapps at internet scale. We asked: how do we “blockchain-ify” such a database? We saw that they'd need three new characteristics: decentralized, immutable, and the ability to "own" assets by holding the private key. So, we wrapped RethinkDB (and later MongoDB) with code to achieve the target characteristics. The result is BigchainDB software.
From the seed of the idea, to intense efforts starting late summer 2015, we made the announcement in February 2016. What initially started as a “lets solve our own problem” approach almost immediately turned into something much bigger than we expected. With people and enterprises from across all industries reaching out looking to partner, collaborate, license or build on the technology, it became clear that we were solving much more than our own problem. The result is BigchainDB, a blockchain database for the world.
We started to build a prototype of BigchainDB in late summer 2015. It matured enough to open-source and announce BigchainDB in February 2016. What initially started as a “lets solve our own problem” approach quickly turned into something much bigger than we expected. People and enterprises from across all industries reached out looking to build on the technology. It became clear that we were solving much more than our own problem.
[ascribe](https://www.ascribe.io/) and [WhereOnTheNet](https://www.whereonthe.net/) are all registered trademarks of BigchainDB.
We ran into another issue. Many people built prototypes on the technology, but there was no "live" network ready for them to use in production. Deploying their own became huge exercises and governance. So with others in the community, we initiated [IPDB Foundation](ipdb.io). Its mandate included running a live public BigchainDB network. We spent a lot of time designing governance.
By early 2017, we'd spent nearly four years thinking about IP and big data. We started to see problems at the intersection of these topics: how can you securely "own" data, and sell it while avoiding "data escapes"? Modern artificial intelligence (AI) was on the rise, and with it, the demand for way more data. We realized that blockchain technology could help, especially decentralized data marketplaces. With Toyota Research Institute, we [built](https://techcrunch.com/2017/05/22/toyota-pushes-into-blockchain-tech-to-enable-the-next-generation-of-cars) a prototype data marketplace that used BigchainDB.
This initial foray into decentralized data marketplaces grew into a much larger project: [Ocean Protocol](www.oceanprotocol.com). The team at BigchainDB GmbH (the company) is now focused on Ocean Protocol. [IPDB Foundation](ipdb.io) has [assumed governance](https://medium.com/ipdb-blog/ipdb-foundation-assumes-governance-of-bigchaindb-software-and-testnet-51235322e14c) of the BigchainDB software and networks.
"ascribe" is a registered trademark of BigchainDB.

View File

@ -1,71 +1,27 @@
---
layout: page
title: Contact
title: Contact BigchainDB GmbH
tagline: Get In Touch
js: page-contact.min.js
---
<section class="section section-contactform">
<div class="row row--wide">
<div class="grid grid--full grid-medium--columns grid--gutters">
<div class="grid__col grid__col--4">
<p>Have a technical question? Head to
<a href="{{ site.social.gitter.url }}">
<svg class="icon icon--social icon--gitter">
<use xlink:href="/assets/img/sprite.svg#gitter"></use>
</svg> Gitter
</a> to chat directly with our developers.
</p>
{% include/form-contact.html %}
<div class="row">
<div class="h-card contactlist">
<p><strong class="p-name p-org">{{ site.address.company }}</strong></p>
<div class="p-adr">
<p class="p-street-address">{{ site.address.street }}</p>
<p><span class="p-postal-code">{{ site.address.zip }}</span> <span class="p-locality">{{ site.address.city }}</span></p>
<p class="p-country-name">{{ site.address.country }}</p>
</div>
<div class="grid__col grid__col--2">
<div class="h-card contactlist">
<p><strong class="p-name p-org">{{ site.address.company }}</strong></p>
<div class="p-adr">
<p class="p-street-address">{{ site.address.street }}</p>
<p><span class="p-postal-code">{{ site.address.zip }}</span> <span class="p-locality">{{ site.address.city }}</span></p>
<p class="p-country-name">{{ site.address.country }}</p>
</div>
<p><a class="u-url" href="{{ site.url }}">{{ site.url | remove: 'https://' }}</a></p>
<p><a class="u-email" href="mailto:{{ site.email.contact }}">{{ site.email.contact }}</a></p>
<div class="social">
<p>
<a href="https://github.com/{{ site.social.github.org }}">
<svg class="icon icon--social icon--github" aria-labelledby="title">
<title>GitHub</title>
<use xlink:href="/assets/img/sprite.svg#github"></use>
</svg>
GitHub
</a>
</p>
<p>
<a href="{{ site.social.twitter.url }}">
<svg class="icon icon--social icon--twitter" aria-labelledby="title">
<title>Twitter</title>
<use xlink:href="/assets/img/sprite.svg#twitter"></use>
</svg>
Twitter
</a>
</p>
<p>
<a href="{{ site.social.medium.url }}">
<svg class="icon icon--social icon--blog" aria-labelledby="title">
<title>Blog</title>
<use xlink:href="/assets/img/sprite.svg#medium"></use>
</svg>
Blog
</a>
</p>
</div>
</div>
</div>
<p><a class="u-url" href="{{ site.url }}">{{ site.url | remove: 'https://' }}</a></p>
<p><a class="u-email" href="mailto:{{ site.email.contact }}">{{ site.email.contact }}</a></p>
</div>
</div>
</section>

View File

@ -124,9 +124,9 @@ conn.postTransactionCommit(txSigned)
</div>
</section>
<nav class="menu--sub" data-gumshoe-header>
<nav class="menu--sub" id="gumshoe">
<div class="row row--wide">
<div class="menu-overflow" data-gumshoe>
<div class="menu-overflow">
<a class="menu__link" href="#server" data-scroll><span class="number">1</span> {{ content.server.title }}</a>
<a class="menu__link" href="#drivers" data-scroll><span class="number">2</span> {{ content.drivers.title }}</a>
<a class="menu__link" href="#docs" data-scroll><span class="number">3</span> {{ content.docs.title }}</a>
@ -367,5 +367,3 @@ conn.postTransactionCommit(txSigned)
</div>
</section>
{% include sections/section-newsletter.html %}

View File

@ -20,11 +20,9 @@ features:
- title: "Byzantine Fault Tolerant (BFT)"
text: "Up to one third of the nodes in the network can be experiencing arbitrary faults and the rest of the network will still come to consensus on the next block."
icon: "icon-network"
new: true
- title: "Low Latency"
text: "A global network takes about a second to come to consensus on a new block. In other words, transaction finality happens fast."
icon: "icon-hourglass"
new: true
- title: "Customizable"
text: "Design your own private network with custom assets, transactions, permissions and transparency."
icon: "icon-settings"
@ -67,10 +65,6 @@ js: page-features.min.js
{% endfor %}
</div>
<p class="text-center features-roadmap" >
<a href="https://github.com/bigchaindb/org/blob/master/ROADMAP.md" class="btn btn-primary">Our Roadmap</a>
</p>
</div>
</section>

View File

@ -65,8 +65,3 @@ intro:
{% include sections/section-partners.html %}
{% include sections/section-cta-services.html %}
{% include sections/section-blog.html %}
{% include sections/section-newsletter.html %}

View File

@ -1,9 +0,0 @@
---
layout: page
title: Newsletter
tagline: Stay in the loop about all things BigchainDB
description: Subscribe to our newsletter and stay in the loop about all things BigchainDB.
---
{% include sections/section-newsletter.html %}

View File

@ -50,8 +50,6 @@ If you want to contribute to the project, you must complete our [Contributor Lic
If you want to sign the CLA form or contact us without using these forms, you can email {{ site.email.gdpr }}.
We use MailChimp for our newsletter, and the information you submit via our newsletter subscription form will be transferred to MailChimp for processing in accordance with their [Terms](https://mailchimp.com/legal/terms/) and [Privacy Policy](https://mailchimp.com/legal/privacy/).
### BigchainDB Test Network
Use of the BigchainDB Test Network available under [testnet.bigchaindb.com](https://testnet.bigchaindb.com) is subject to its own [Terms](https://testnet.bigchaindb.com/terms-network). Creating an account and using it submits your entered information to 3Scale according to their [Terms](https://www.3scale.net/terms-and-conditions/) and [Privacy Policy](https://www.redhat.com/en/about/privacy-policy).

View File

@ -1,188 +0,0 @@
---
layout: base
title: Services
description: "Hands-on consulting and production support by blockchain experts"
header: hero-services.jpg
image: share-image-services.jpg
js: page-services.min.js
hero:
title: "Hands-on consulting and production support"
description: "From ideation to production, we have the team and technology to help you build enterprise-grade applications and platforms."
cta:
- name: Get in touch
link: "#contact"
scroll: true
support:
features:
- title: "Ideation"
description: "Have some ideas but dont know where to start? We run a workshop to help you better understand blockchain technologies and let you drill-down into the right use cases that bring the biggest benefit."
icon: icon-education
- title: "Use case development"
description: "You have a specific idea for a blockchain application? We help you build a detailed business and technical architecture that lets you move forward with confidence."
icon: icon-blueprint
- title: "Blockchain consulting"
description: "The idea is clear. Now you need help to build a prototype. Our blockchain consultants can work to your needs, budget and timeline to get a demo into your hands that will impress."
icon: icon-engineering
partners:
title: "Trusted by leading global companies"
description: "We work with partners who are deploying data-centric blockchain applications for automotive, energy, identity, IoT, intellectual property and supply chain use cases."
intro:
title: "Designed for data-centric, high-transaction use cases."
description: "Whether youre a system architect, a developer or a database specialist, BigchainDB offers the performance and tooling to help you create the future."
title2: "Decentralized, secure and immutable."
text: "Traditional blockchains lack what most enterprises require. BigchainDB takes a different approach, one that starts with a big data distributed database and then adds blockchain characteristics. The result is high throughput and low latency, making data-centric and high volume use cases a breeze."
text2: "Only BigchainDB combines the all-important advantages of queryability and performance of traditional databases with the distributed, secure and immutable nature of blockchain technology into one package."
features:
- title: "Easy to build with"
description: "Build applications that speak directly to BigchainDB using our set of drivers and APIs. A powerfully simple and quick way to prototype."
icon: icon-wrench
- title: "Interoperability by design"
description: "Interoperability with Ethereum, IPFS, Bitcoin and other protocols such as the Interledger Protocol (ILP), IPLD, COALA IP and COALA SC mean that enterprises can develop their applications knowing that their work is future-proofed."
icon: icon-plug
contact:
title: "Get in touch"
description: "Ready to start building with BigchainDB? Enter your details below and we'll be in touch right away."
interests:
- Training
- Partnership
- Proof-of-concept / prototype / pilot
- Production support
- Other
industries:
- Analytics
- Automotive
- Consulting
- Data Exchange
- Energy
- Finance
- Government
- Health Care
- Identity
- Insurance
- Law
- Manufacturing
- Media
- Security
- Supply Chain
- Technology
- Other
---
<header class="hero hero--services" {% if page.header %}style="background-image:url('/assets/img/{{ page.header }}')"{% endif %}>
{% include menu-main.html %}
<div class="hero__content row">
<hgroup>
<svg class="logo logo--services logo--white">
<use xlink:href="/assets/img/sprite.svg#logo-services"></use>
</svg>
<h1 class="hero__title">{{ page.hero.title }}</h1>
<h2 class="hero__subtitle">{{ page.hero.description }}</h2>
{% for cta in page.hero.cta %}
<a class="btn btn-blue-light hero__action" href="{{ cta.link }}" {% if cta.scroll %}data-scroll{% endif %}>{{ cta.name }}</a>
{% endfor %}
</hgroup>
</div>
</header>
<section class="section section--servicesdetail background--blue--light">
<div class="row row--wide">
<div class="grid grid--full grid-small--third grid--gutters">
{% for feature in page.support.features %}
<div class="grid__col">
<div class="feature">
<svg class="feature__icon icon">
<use xlink:href="/assets/img/sprite.svg#{{ feature.icon }}"></use>
</svg>
<div class="feature__detail">
<h1 class="feature__title">{{ feature.title }}</h1>
<p class="feature__text">{{ feature.description }}</p>
</div>
</div>
</div>
{% endfor %}
</div>
<div class="actions">
<a class="btn btn-blue" data-scroll href="#contact">Get in touch</a>
</div>
</div>
</section>
{% include sections/section-partners.html %}
<section class="section section--servicesintro background--darker">
<div class="row">
<header class="section-header text-left">
<h1 class="section-title">{{ page.intro.title }}</h1>
<p class="section-description">{{ page.intro.description }}</p>
<h2>{{ page.intro.title2 }}</h2>
<p>{{ page.intro.text }}</p>
<p>{{ page.intro.text2 }}</p>
</header>
<div class="grid grid--full grid-small--half grid--gutters">
{% for feature in page.intro.features %}
<div class="grid__col">
<div class="feature">
<svg class="feature__icon icon">
<use xlink:href="/assets/img/sprite.svg#{{ feature.icon }}"></use>
</svg>
<div class="feature__detail">
<h1 class="feature__title">{{ feature.title }}</h1>
<p class="feature__text">{{ feature.description }}</p>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</section>
<section class="section section--servicestestimonial">
<div class="row">
<figure class="testimonial">
<blockquote class="testimonial__quote">{{ site.data.testimonials.set4[0].quote }}</blockquote>
<figcaption class="testimonial__caption">
<img class="testimonial__avatar" src="/assets/img/{{ site.data.testimonials.set4[0].image }}">
<cite class="testimonial__cite">
<span class="testimonial__name">{{ site.data.testimonials.set4[0].name }}</span>
<span class="testimonial__org">{{ site.data.testimonials.set4[0].org }}</span>
</cite>
</figcaption>
</figure>
</div>
</section>
<section class="section section--servicescontact background--blue" id="contact">
<div class="row">
<header class="section-header">
<h1 class="section-title">{{ page.contact.title }}</h1>
<p class="section-description">{{ page.contact.description }}</p>
</header>
{% include form-services.html %}
</div>
</section>

View File

@ -4,12 +4,9 @@ We have multiple forms collecting and processing data throughout the whole site
Form | Actions
------------ |-------------
`/newsletter` | send data to MailChimp and subscribe to newsletter list (double opt-in)
`/contact` | send data to CC emails, Slack message
`/services` | send data to CC emails, Slack message, add new row to Google Sheets
`/cla` | 2 different forms, send data to CC emails
Initial form sending, except for newsletter, is handled via formspree.io with a Gold account. As form submissions arrive there, Formspree sends out the received data to the email addresses setup as CC in [our site config](../_config.yml).
Initial form sending is handled via formspree.io with a Gold account. As form submissions arrive there, Formspree sends out the received data to the email addresses setup as CC in [our site config](../_config.yml).
Submissions are processed further like so:
@ -18,7 +15,3 @@ _Formspree -> Zapier Email Parser -> Zapier -> Slack & Google Sheets_
The Zapier email parser is a special mailbox provided by Zapier which receives form submissions from Formspree, parses the content of those emails and extracts data fields out of it. The parser as a source then provides the structured data to our Zapier tasks.
The Slack message never contains personally identifiable information. Name and email are not transmitted.
## Newsletter
Newsletter submissions are sent directly to MailChimp via their undocumented `jsonp` functionality, NOT the MailChimp API. We use a local copy of [ajaxChimp](https://github.com/scdoshi/jquery-ajaxchimp) to send the data. Library is old and jQuery but it just works across a wide range of browsers, even older ones.

View File

@ -6,7 +6,6 @@ const $ = require('gulp-load-plugins')()
// manually import modules that won't get picked up by gulp-load-plugins
import { src, dest, watch, parallel, series } from 'gulp'
import del from 'del'
import parallelize from 'concurrent-transform'
import browser from 'browser-sync'
import critical from 'critical'
import fs from 'fs'
@ -230,7 +229,7 @@ export const svg = () => src(SRC + '/_assets/images/*.svg')
export const images = () => src(SRC + '/_assets/images/**/*')
.pipe($.if(isProduction || isStaging, $.imagemin([
$.imagemin.gifsicle({ interlaced: true }),
$.imagemin.jpegtran({ progressive: true }),
$.imagemin.mozjpeg({ progressive: true }),
$.imagemin.optipng({ optimizationLevel: 5 }),
$.imagemin.svgo({plugins: [{ removeViewBox: true }]})
])))

15696
package-lock.json generated Normal file

File diff suppressed because it is too large Load Diff

View File

@ -12,6 +12,9 @@
"scripts": {
"start": "gulp",
"build": "gulp build --production",
"build:staging": "gulp build --staging",
"deploy": "gulp deploy --live",
"deploy:staging": "gulp deploy --beta",
"test": "stylelint _src/_assets/styles/**/*.scss"
},
"browserslist": [
@ -24,59 +27,55 @@
"ie >= 11"
],
"dependencies": {
"bigchaindb-driver": "4.1.0",
"bootstrap": "^4.3.1",
"bigchaindb-driver": "4.1.2",
"bootstrap": "^4.5.0",
"clipboard": "^2.0.1",
"cookies-eu-banner": "^1.2.14",
"gumshoejs": "5.1.1",
"cookies-eu-banner": "^2.0.1",
"gumshoejs": "^5.1.2",
"is-in-viewport": "^3.0.4",
"jquery": "^3.4.1",
"jquery": "^3.5.1",
"normalize-opentype.css": "^0.2.4",
"normalize-scss": "^7.0.1",
"parsleyjs": "^2.9.1",
"popper.js": "^1.15.0",
"select2": "^4.0.7",
"smooth-scroll": "^16.0.0",
"svg4everybody": "^2.1.9",
"parsleyjs": "^2.9.2",
"popper.js": "^1.16.1",
"select2": "^4.0.13",
"smooth-scroll": "^16.1.3",
"textarea-autogrow": "^1.0.0",
"vivus": "^0.4.4"
"vivus": "^0.4.5"
},
"devDependencies": {
"@babel/core": "^7.4.4",
"@babel/preset-env": "^7.4.4",
"@babel/register": "^7.4.4",
"acorn": "^6.1.1",
"browser-sync": "^2.26.5",
"concurrent-transform": "^1.0.0",
"critical": "^1.3.4",
"cross-spawn": "^6.0.5",
"del": "^4.0.0",
"@babel/core": "^7.9.6",
"@babel/preset-env": "^7.9.6",
"@babel/register": "^7.9.0",
"browser-sync": "^2.26.7",
"critical": "^1.3.9",
"del": "^5.1.0",
"gulp": "^4.0.2",
"gulp-autoprefixer": "^6.1.0",
"gulp-clean-css": "^4.2.0",
"gulp-cli": "^2.2.0",
"gulp-autoprefixer": "^7.0.1",
"gulp-clean-css": "^4.3.0",
"gulp-cli": "^2.2.1",
"gulp-concat": "^2.6.1",
"gulp-header": "^2.0.7",
"gulp-header": "^2.0.9",
"gulp-htmlmin": "^5.0.1",
"gulp-if": "^2.0.2",
"gulp-imagemin": "^5.0.3",
"gulp-if": "^3.0.0",
"gulp-imagemin": "^7.1.0",
"gulp-include": "^2.4.1",
"gulp-load-plugins": "^1.5.0",
"gulp-rename": "^1.4.0",
"gulp-load-plugins": "^2.0.3",
"gulp-rename": "^2.0.0",
"gulp-replace": "^1.0.0",
"gulp-rev": "^9.0.0",
"gulp-rev-replace": "^0.4.4",
"gulp-sass": "^4.0.1",
"gulp-sass": "^4.1.0",
"gulp-sourcemaps": "^2.6.5",
"gulp-svg-sprite": "^1.4.0",
"gulp-svg-sprite": "^1.5.0",
"gulp-uglify": "^3.0.2",
"gulp-util": "^3.0.8",
"gulp-zip": "^4.2.0",
"js-yaml": "^3.13.1",
"request": "^2.88.0",
"stylelint": "^10.0.0",
"gulp-zip": "^5.0.1",
"js-yaml": "^3.14.0",
"request": "^2.88.2",
"stylelint": "^13.5.0",
"stylelint-config-bigchaindb": "^1.2.2",
"stylelint-config-standard": "^18.3.0",
"stylelint-config-standard": "^20.0.0",
"uglify-es": "^3.3.9"
},
"engines": {