Skip to content
Building the epistemic web
JavaScript Python HTML CSS XSLT Batchfile Shell
Branch: develop
Clone or download
tjquinn1 and jdamerow Story/vgnwb 257 (#137)
* started annotations list

* added checboxes to appellation list items

* fixed button not disappearing when swithcing out of submitallappellation

* add and remove from appellations in appellation list

 Changes to be committed:
	modified:   annotations/static/annotations/js/annotators/appellationlist.js
fixed git author

* added select menu

* added template rest view, serializer, removed empty file, and added select to appellation list template

* retrieve single part templates using rest_views, added select for templates, added serializer, removed dotenv files

* fixed missing quote

* added vuex, added vue dev build, concept picker now shows when clicking select concepts button. moved getCreatorName and getFormattedDate out of utils and into appellationlist and relationlist components.

* started refactoring prepare method

* started create from text view

* added create from text method to create relations from a text to current appellations

* added mass assignment field to relation template

* changed vue to production

* added select all, deselect all buttons. fixed adding of duplicate annotations list, fixed select concept button not hiding. added error message if upload fails. Fixed css on buttons

* removed png.icloud images

* removed xml.icloud files

* added semicolons, comment, and changed vue to production

* added migration file

* fixed static part_id, user id, occursIn id and project Id. also removed vue.js file

* [story/VGNWB-257] added moment js.

* [story/VGNWB-257] refactored moment js, fixed wonky formatting, refactored layout to reduce clutter on smaller screens.

* [story/VGNWB-257] added new css break point called xl, refactored layout to work on both larger screens and medium dpi screens

* updated setAppellation to use slice to clone array to get ride of reference

* Fixed validation errors. error is raised when nothing is selected and submit is clicked. Errors messages are removed once the error has been corrected. Once a concept is selected for a text, it will automatically populate the concept field.

* added check/uncheck functionality through root event
Latest commit 38b35c9 Apr 8, 2019


VogonWeb is a web-based platform for encoding your interpretations of texts. The annotation interface allows you to tag words or phrases with the concepts to which you believe they refer, and bring those tags together into relational statements that you believe are supported by the text. These tags and relations comprise the epistemic web: a network of texts, interpretations, and the people who create those interpretations. As we build the epistemic web we are producing not only a rich knowledge-base for the humanities, but also documenting the scholarly process itself.


There are two configuration files in the /vogon/ directory:

  • Production configuration for Heroku.
  • Development/testing configuration file.

If you're not deploying on Heroku, it's probably better to duplicate and go from there.

Select your preferred configuration with:

export DJANGO_SETTINGS_MODULE='vogon.my_settings_file'

See the Django documentation for information on the built-in configuration options.

VogonWeb needs several additional configuration parameters:


Right now we're using Redis as the broker for Celery. You should set REDIS_URL in your environment, e.g.

export REDIS_URL="redis://"

Conceptpower integration

VogonWeb expects the following settings for communication with the Conceptpower authority service. The preferred approach is to set these in your environment rather than hard-coding them in the config:

  • CONCEPTPOWER_USERID - User in Conceptpower who can create concepts.
  • CONCEPTPOWER_ENDPOINT - Full path to the REST endpoint, e.g.

If your Conceptpower instance is using a custom namespace, you will also want to set:


Quadriga parameters

If you're using Quadriga to deposit annotation data, you'll need to set the following parameters (again, preferably in your environment):

  • QUADRIGA_USERID - A user who can create workspaces and submit networks.
  • QUADRIGA_ENDPOINT - Location of the Quadriga REST endpoint. e.g.
  • QUADRIGA_PROJECT - Default project to which VogonWeb will submit networks. This can be overridden on a per-project basis from within the VogonWeb admin interface.
  • QUADRIGA_CLIENTID - An alphanumeric identifier for your VogonWeb instance. This is used to build client-specific project/workspace URLs in Quadriga.

Amazon S3

VogonWeb uses an S3 bucket for some media (currently just user profile pictures). Set the following three parameters in your environment:



VogonWeb uses Elasticsearch 2 for document search. Take a look at the Haystack configuration section before deploying. For details, seeing the Haystack documentation. It should look something like:

    'default': {
        'ENGINE': 'annotations.elasticsearch_backends.JHBElasticsearch2SearchEngine',
        'URL': '',
        'INDEX_NAME': 'vogon',
if not 'TRAVIS' in os.environ:
    HAYSTACK_SIGNAL_PROCESSOR = 'haystack.signals.RealtimeSignalProcessor'

The RealtimeSignalProcessor is pretty aggressive. If you're deploying without ES, consider commenting out that line.


VogonWeb is configured to deploy on the Heroku platform. Deploying it elsewhere is pretty easy, too. The preferred approach is to serve it with Gunicorn behind NGINX or Apache. See this informative blog post for an example.

You'll want to set up two separate processes: one to run the webapp itself (e.g. with Gunicorn), and another to execute Celery tasks. On Heroku we use these two processes:

  • web: gunicorn vogon.wsgi
  • worker: celery worker -B -A vogon

The -B flag is for periodic tasks, in this case a task that submits networks to Quadriga. You may want to remove this flag if you're just getting started.

Both of these processes should be run with the environment variables described above.

Database backend

At a minimum, you'll need a database. VogonWeb has been tested with PostgresQL, but most Django backends should work. See the Django documentation.

Redis broker

A vanilla Redis server will work. You can read about using Redis with Celery here.

Elasticsearch 2.x

We use Haystack to interface with Elasticsearch 2. The current version of Haystack doesn't actually support ES2 (the ES API changed dramatically), so we're using a custom backend located in annotations/

If you're using ES 1.x, the built-in ES backend for Haystack should work just fine.

You can’t perform that action at this time.