Maven

2024

Course: 6.1040 Software Design

Instructors(s): Arvind Satyanarayan, Daniel Jackson

Collaborator(s): Ege Kabasakaloğlu, Carolina Moura, Anna Murphy

Introduction

Maven is a platform that crowdsources translations for educational and academic materials using a Genius-style annotation interface. A user can upload a document which gets partitioned into sections for other users to help translate. Each section can have multiple translations which users may upvote or downvote. In the end, users can choose which translation for each section they want, and export a translation for an entire document.

Motivation

We were particularly moved towards this idea because 2 of the students within our team are international students who volunteer to translate documents and educational materials for students back in their home country.

We identified a problem where existing volunteer translation efforts face problems with collaboration and recruiting volunteers for larger projects. We wanted to create an application that would help democratize access to online educational content for non-English speakers. We designed the following solution:

Solution

  • A platform for crowdsouring translations for educational and research materials
  • The platform would include a Genius-style annotation interface for easy collaboration
  • We would rank the accuracy of translations via upvoting and allow users to export compiled translations

Inspiration

The design of our application was inspired by the following:

  • Genius.com: An interface like this could be used in our app to divide content into annotatable sections, and allow independent translations for each section which can be critiqued or approved by others
  • ScienceDirect: We imagined a similar digital catalogue that allows users to filter by different criteria
  • Stack Overflow: For quality assurance, we wanted users to be able to rate the quality of translations and sort translations by rating in our app
Image 1
Image 2
Image 3

Implementation

Tech stack: Vue, MongoDB, Express, Mapbox, Pinia

We followed a functional design, as taught in our class, for our software. We outlined our app in terms of core concepts, each with its own operational principle and set of actions and states. Concepts are then synchronized.

Document [User, Tag]

Purpose: Represent an article or a similar document uploaded onto the app

OP: A user uploads any online document that they need translated. Then, they can make requests to translate it into a different language.

States

documents: set Document
title: one Document  one string
author: one Document  one string
content: one Document  one string
originalLanguage: one Document  one Tag
uploader: one Document  one User

Action

create(title: string, author: string, content: string, originalLanguage: Tag, uploader: User)  creates a new document, and sets its fields to the appropriate values
delete(document: Document)  deletes the given document

Translation Request [Document, Section, Tag, User]

Purpose : Allows users to take documents published and have them translated.

OP: Users can take documents published and make requests to have them translated. The document then gets divided into sections and each section gets translated separately. After the translation is complete, you can download the finished translation.

States

document: one TranslationRequest  one Document
sections: one TranslationRequest  list Section
languageTo: one TranslationRequest  Tag
requester: one TranslationRequest  one User

Actions

create(document: document, languageTo: Tag, sections: list Section curUser: User)  creates a new request for the given document, language, and sections.
Must be logged in, and sets the requester to be the currently logged-in user.

Section

Purpose: Represents a short but meaningful (3-4 sentences) section of content that can be translated independently

OP: Uploaded untranslated content is grouped into sections. Then, users can provide translations to each section separately, which allows for easy collaboration.

States:

sections: set Section
sectionText: one Section  one string

Actions

createSingleSection(text: string)  creates a single section from the given text and returns it
splitIntoMultipleSections(text: string)  automatically splits a large text into multiple different sections (each 3-4 sentences long) and returns the sections as a list

SectionTranslation [User, Section]

Purpose: Represents a possible translation of a section in a text

OP: Each section in the app can be translated in different ways by different users. Each of these possible translations are then displayed as alternatives.

States

sectionTranslations: set SectionTranslation
translator: one SectionTranslation  one User
translation: one SectionTranslation  one String
translationOf: sectionTranslations  one Section

Actions

createSectionTranslation(section: Section, translator: User, translation: string)  creates a sectionTranslation for a given section

Upvote [Content, User]

Purpose: Allow users to rank content

OP: Signed-in users can upvote content to show they think it is of high quality

States:

upvotes: set Upvote
upvotedContent: one Upvote  one Content
upvotingUser: one Upvote  one User

Actions

upvote (c: Content, u: User)
removeUpvote (c: Content, u: User)
countUpvotes (c: Content)
Image 1

Our dependency diagram showing which concepts rely on which. We ended up dropping the access control because no other concepts depended on it.

More

What I wish we did

If given more time, my group and I would have liked to explore the possibility of incorporating a LLM to conduct preliminary translations which users can help annotate. We also would have liked to add functionalities of uploading and exporting pdf files to and from the web application as well as allowing for users to comment on translations to further discussions, like on Genius.com.

We also wanted to include the "Project Access" concept where access to certain documents are restricted to whoever the person uploading it adds as a translator or viewer.

What I learned

It was super interesting to practice designing sofware systems as a set of interacting "concepts," as described in Professor Daniel Jackson's The Essence of Software. Beyond software design and development, the course helped us practice skills related to ideation, user research, design and user testing.

Contributions

All members contributed to the software design and development of the application equally. Concepts were divided among team members to develop end-to-end. Kelly Fang designed the wireframes.