Telescope intends to replace Observatory

Telescope intends to replace in your browser


Telescope intends to replace Observatory as the RCOS website.

Development Notes

These are note for Telescope Developers on how to find and update Telescope itself.

Project Structure

Telescope is a large enough project that it may not be immediately obvious where certain files are. This section provides a map to this repository.

  • .github: This folder holds configuration files related to this repository's interactions with Github.com. This includes the GitHub issue templates, the continuous integration workflows, and the Dependabot configuration.
  • proposals: This folder contains the project proposal files that Telescope has been submitted under for the Rensselaer Center for Open Source (RCOS).
  • rcos-data: This git submodule points to the current telescope version of the repository that contains the migrations for the central RCOS database.
  • graphql: This folder contains the introspected schema.json file for the central RCOS GraphQL API exposed via Hasura over the central RCOS database. This folder also contains GraphQL files for all of the different queries that Telescope will send to the central API.
  • static: This folder contains statically served files and assets, including
    • Telescope icons
    • RCOS icons and branding
    • The global CSS style file
    • All of Telescopes javascript
    • Sponsor logos and branding
  • templates: This folder contains all of the Handlebars templates used to render Telescope's frontend.
  • src: This is the main Telescope codebase, written in Rust.

Schema Introspection

When the central RCOS GraphQL API (a Hasura wrapper over the central RCOS Postgres database) gets updated, Telescopes schema needs to get updated to match. After merging whatever changes or migrations have been made to the telescope-dev-version branch of the rcos-data repository, update Telescope's git rcos-data submodule to point to the newest commit on the telescope-dev-version branch. After you have done this and pulled the submodule, update the local database using the hasura client. The commands should look like this:

$ hasura --project rcos-data/ migrate --admin-secret xxxxxxxxxxxxxxxxxxxxxxxx --endpoint http://localhost:8000 apply
$ hasura --project rcos-data/ metadata --admin-secret xxxxxxxxxxxxxxxxxxxxxxxx --endpoint http://localhost:8000 reload

where xxxxxxxxxxxxxxxxxxxxxxxx is replaced by the hasura admin secret in your .env file. After applying the migrations, go to the hasura console to make sure that all the proper tables are tracked, and all the types and queries are available. To go to the hasura console on your local machine, navigate to http://localhost:8000/console/settings/metadata-actions in your browser.

If you haven't already, you should install a GraphQL client to introspect the schema. There are several of these that are probably acceptable, but for consistency we use the graphql-rust client. Install this using the command from its README.

$ cargo install graphql_client_cli --force

Finally, regenerate Telescope's schema.json file as follows:

$ graphql-client introspect-schema --header 'x-hasura-admin-secret: xxxxxxxxxxxxxxxxxxxxxxxx' --output graphql/rcos/schema.json http://localhost:8000/v1/graphql

again, xxxxxxxxxxxxxxxxxxxxxxxx is replaced by the hasura admin secret in your .env file.

You may also have to introspect the GitHub V4 API schema, since we also keep a copy of that in telescope. This requires a GitHub Personal Access Token (PAT) which you can generate here. Once you have generated your PAT, you can introspect/update the local GitHub Schema using

$ graphql-client introspect-schema --output graphql/github/schema.json --authorization "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" https://api.github.com/graphql

where xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx is replaced by your PAT.


  1. Install dependencies:

    1. Rust (see https://www.rust-lang.org/ for more info)
      $ curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
      $ source ~/.cargo/env
    2. Hasura CLI to run database migrations. See the hasura CLI docs for more info.
      $ curl -L https://github.com/hasura/graphql-engine/raw/stable/cli/get.sh | bash
    3. Docker and docker-compose to run telescope and the database locally. this can be a complicated process, but there are good instructions online here. Message me for help if you need it.
  2. Clone this repository:

    $ git clone --recurse-submodules https://github.com/rcos/Telescope.git

    You need to make sure you get all of the submodules here using --recurse-submodules otherwise you won't have any of the RCOS branding logos or icons, or any of the database migrations and setup.

  3. Copy the configuration templates as follows:

    • config_example.toml -> config.toml
    • .env.example -> .env (note: the config.toml and .env files must be created yourself.)

    Then modify them to match your environment. You may need to generate the GitHub related credentials. Go here to register a new GitHub OAuth application or get a new client secret. You will also have to create a discord OAuth app and bot token. Instructions can be found in config_example.toml.

  4. Build and start the docker images.

    $ docker-compose up -d 
  5. Run the database migrations. Replace the "xx.." in the command with the admin secret from your .env file. Make sure the admin-secret is at least 32 characters long.

    $ hasura --project rcos-data/ migrate --admin-secret xxxxxxxxxxxxxxxxxxxxxxxx --endpoint http://localhost:8000 apply
  6. Track the Hasura tables: In Hasura (http://localhost:8000), enter your admin-secret when prompted. Navigate to the "Data" tab, and click "Create Table". Track all tables, and hit "Add Table".

  7. At this point Postgres, the Hasura GraphQL API, Caddy, and Telescope should all be running on your system in individual docker containers. Docker exposes the Hasura console at http://localhost:8000 and https://localhost:8001, and Telescope is exposed at https://localhost:8443. To shut them all down, run

    $ docker-compose down

    If you only want to make changes to telescope, you don't need to take down all the containers. Simply make your changes, run cargo check to verify that it compiles, and then rebuild just telescope in docker using

    $ docker-compose up --build -d

Collection of the latest Issues



Comment Icon1

Is your feature request related to a problem? Please describe. I wanted to check out the list of projects available on the RCOS Telescope page. However, when I clicked the Projects tab, I was greeted with "501 - Not Implemented" and told to contact a coordinator and open a GitHub issue. Below is a screenshot of this page.


Describe the solution you'd like I think the Projects page could display each project in its own tile with its name and description. As an example, here is a screenshot of the Datasets page from the IBM Machine Learning eXchange project.


Describe alternatives you've considered Another approach could be listing each project in a row and putting those rows in a list. This could list both the project name and description as well.

Additional context On the home page, there is a section featuring statistics, and it says there are zero active projects and 41 total projects. I am not sure if this is part of why the 501 page appears, but it does seem unusual.




Comment Icon0

Currently, the compile time for Telescope is around 1 minute from scratch on a 12 thread modern laptop. On most laptops, it will probably be a lot slower. There are several things I can think of that might speed up the telescope build.

  • Make sure as many as duplicate dependencies in the tree as possible are the same version.
  • Split the discord bot into its own process or dynamic library, would modularize the slowest part of the build that doesn't change as much. Serenity uses lots of procedural macros and packages. I was thinking I'd use tarpc to make this seamless as possible for making a process, but maybe just regular http api stuff would be less complex. I plan on exploring this fully later. I will probably need to keep serenity in the main process as well (in order to keep the non bot discord features from needing rpc), but with less features in the build. This all might be a no go if the cut down serenity doesnt build much faster.
  • Set a good.cargo/config.toml (I have already found much better build speed using llvm bitcode and less debuginfo but they need a special llvm install that matches rust).


Comment Icon0

Request: Currently the text I feel is too similar to the background. The gray on gray makes it hard to read. This is most noticeable in the navigation bar, and in the sponsor page. For the sponsor image, I couldn't read it at first.

This I feel like would be a simple fix: Increase the contrast on the text, perhaps make the text a more whiter tone of gray so there is more contrast.

Example of text: image

Second Example: image

Third example: image



Comment Icon0

Add links and buttons on the profile page to link GitHub (like the ones that already exist for Discord and RPI CAS). Supersedes #5.



Comment Icon0

Users should be able to:

  • Enroll in ongoing & upcoming semesters.
  • Delete enrollments
  • Edit parts of enrollments, including:
    • Credit count
    • For Pay?
    • Project (choose from the semester's approved project proposals perhaps)?
  • See all their enrollment info

Privileged users (current coordinators, admins, and faculty advisors):

  • Export all enrollments for a semester
    • JSON
    • CSV
  • Edit all attributes of any current semester enrollment.
    • Mid-year grade
    • Final grade
    • Credit
    • For Pay
    • Is coordinator
    • Is project lead
    • project
  • Delete enrollments
  • View all enrollments in a table in the Coordinators panel (#119)


Comment Icon0

Error Message The RCOS Central Hasura GraphQL API returned at least one error. Please contact a coordinator and create an issue on the telescope GitHub. Internal error description(s): [":0:0: Uniqueness violation. duplicate key value violates unique constraint "unique_type_account_id""]

To Reproduce Steps to reproduce the behavior:

  1. Login with Github account and link account to RPI CAS.
  2. Logout
  3. Log back in, this time with Discord account.
  4. Try to link account to RPI CAS again.

Expected behavior Account is linked to CAS


  • OS: Windows 10
  • Firefox
  • Version 89.0.2


Comment Icon0

On of the testers created an account using GitHub, despite already having an account linked to RPI CAS & Discord. When trying to link RPI CAS to the account created with GitHub, they landed on this error page. image

This error should be checked for and modified to avoid having a JSON error object in the user interface. In the bigger picture, users should be able to delete their accounts (#15) or merge existing accounts. Both features are desirable, but merging accounts would be especially nice with regards to (#135).



Comment Icon0

Mentors have expressed an interest in having roles and/or a command on the RCOS Discord server to indicate the number of credits a user is enrolled for.



Comment Icon1

Add a command to the bot that will pull info from the RCOS API and make/update/move small group categories & channels and give roles to the users currently enrolled in those projects. This should be limited to use by coordinators/faculty advisors/sysadmins.



Comment Icon1

The coordinator panel is accessible to current coordinators and admins. It should provide CRUD operation access on enrollments, project pitches, and meetings. If there are multiple ongoing semesters (rare situation but not impossible) there should be a mechanism to select which one to view.



Comment Icon0

Tracking issue for tabs on the meeting page as requested by @Apexal and others in the rcos discord test group.

There are still some implementation details to iron out. Would tabs just hide the meetings of any other type? Would there be separate templates, or even separate pages for each meeting type?



Comment Icon1
  • Render descriptions with CommonMark
  • Active vs inactive/retired.
  • User list
  • Link Repo
  • Link PM
  • Tags list
    • Not required for 1.0.0.
  • Editable by PM and privileged users.
    • PM
    • Active Status
    • Description
    • Repo Link
    • Tag list
  • Join
  • Leave


Comment Icon1
  • Name
  • Projects the user owns
  • Projects the user has contributed to
  • Attendance records and statistics if available to viewer
  • Badges (sysadmin, account age)
  • Linked accounts
    • Github
      • If Github is linked, display recent public contributions.
    • Discord
    • RPI CAS


Comment Icon1
  • Creating attendance event
    • With Code
    • With Phrase
    • With link
      • QR Code to link
  • User confirm attendance
  • Privileged User verifies confirmed attendance
  • Privileged User views attendance
  • Privileged User exports attendance
    • to CSV
    • to JSON

Find the latest versions by id

0.9.0 - Feb 03, 2022

0.9.0 - February 2nd, 2022

  • Fixed bug in rendering of registration form. (#222)
  • User profile OGP tags (#228)
  • OGP theming (#235)
  • Added Spring 2022 RCOS proposal (#240)
  • Updated minimum rust version to 1.58.1.
  • Fixed bug that missed verified role on users already in the RCOS Discord. (#236, #242)

0.8.5 - Dec 31, 2021

0.8.5 - December 31st, 2021

  • Changes to the config file:
    • The public telescope URL is now in the root of the config rather than the Discord section.
  • Dynamic OGP tags. (#218)
  • Server side cohort validation. (#220)

0.8.4 - Dec 30, 2021

0.8.4 - December 29th, 2021

  • Disabled signup using anything except Discord. (#217)
  • Added descriptions OGP tag. (#216)

0.8.3 - Dec 23, 2021

0.8.3 - December 22nd, 2021

  • Updated minimum rust version to 1.57.0.
  • Added Open Graph Protocol meta tags to site. (#205)
  • Fixed critical security issues reported by Chris Reed (Thanks, Chris, for reporting these to me):
    • XSS bug in the meeting description text box.
    • Privilege escalation bug on the user settings page.
  • Fixed two typos also reported by Chris Reed (Thanks again Chris)
  • Updates to a variety of dependencies.

0.8.2 - Nov 30, 2021

0.8.2 - November 30th, 2021

  • Fixed bug that prevented user deletion. (#204)

0.8.1 - Nov 19, 2021

0.8.1 - November 19th, 2021

  • Fixed bug that prevented meeting creation.

0.8.0 - Nov 17, 2021

0.8.0 - November 17th, 2021

  • Replaced all usernames with user IDs. (#130)
  • Updated Hasura to v2.0.10

0.7.3 - Nov 03, 2021

0.7.3 - November 3rd, 2021

  • Changes to the config file:
    • Now only a single RCOS Discord server ID is accepted instead of a list of IDs.
  • Fixed error caused by unlinking Discord account while authenticated with Discord. (#185)
  • Update Rust to 1.56 and Rust 2021 Edition. (#186)
  • Change RCOS contact email from [email protected] to [email protected]. (#188)
  • Add Discord gateway. (#178)
  • User deletion functionality. (#15, #189)

0.7.2 - Oct 12, 2021

0.7.2 - October 12th, 2021

  • Account linking with Discord (#5, #181)
  • Updated Discord colors and icons (#116, #181, #182)
  • Tweaked format of Discord Guild IDs in config file (#179)

0.7.1 - Sep 29, 2021

0.7.1 - September 29th, 2021

  • Make the /whois discord command ephemeral -- only the user who invokes the interaction will see the response.
  • Fixed "Schedule" link on the home page to render correctly on Safari. ([#176])
  • Updated everything to work at https://rcos.io instead of https://telescope.rcos.io.

(from changelog)

0.7.0 - Sep 09, 2021

0.7.0 - September 9th, 2021

  • Name change functionality. (#16)
  • Cohort edit functionality. (#16)
  • Show draft meetings on profile pages.
  • Fixed homepage link to include past developers.

from changelog

0.6.5 - Aug 31, 2021

This patch changes the RPI CAS url to work with the new RPI CAS provider.

0.6.4 - Jul 14, 2021

This patch fixes a bug that prevented external slide links from showing up in the meeting edit form.

0.6.3 - Jul 14, 2021

This patch adds meeting deletion functionality. This should just about finish the meeting system.

0.6.2 - Jul 13, 2021

This patch fixes a bug that prevented hosts of draft meetings from viewing them.

0.6.1 - Jul 10, 2021

This release fixes a bug that prevented events from prior semesters from being edited properly.

0.6.0 - Jul 10, 2021

This release adds support for creating and editing meeting records. Support for deleting meetings will be added in the next patch, along with any bug fixes needed for this release.

0.5.2 - May 26, 2021

Telescope 0.5.2 upgrades handlebars and fixes some rendering bugs.

0.5.1 - May 25, 2021

Quick fix for a rendering error on user profiles

0.5.0 - May 25, 2021

This telescope release adds an early stage discord bot and a page listing existing developers with some filtering options. It also corrects several timezone issues and works on the newest version of the RCOS database / API.

0.4.2 - Mar 25, 2021

Patch release to tweak the colors and layout of the schedule page.

0.4.1 - Mar 25, 2021

Patch release to add domains to buttons on meetings page and fix bug where parameters on page increment themselves.

0.4.0 - Mar 25, 2021

The largest feature in this release is the meetings page. This release also tweaks profile URLs and error handling slightly.

0.3.1 - Mar 23, 2021

Fix publish action to pull submodules recursively.

0.3.0 - Mar 23, 2021

This is the first deployed release of telescope. Many features still to come.

0.2.5 - Mar 08, 2021

Tweak deployment workflow.

0.2.4 - Mar 08, 2021

Tweak GitHub Actions release workflow. Hope for successful deployment.

0.2.3 - Mar 08, 2021

Tweak publish workflow to get continuous deployment to work

0.2.2 - Mar 08, 2021

Further tweaks to the docker publish workflow to try to get a working deployment.

0.2.1 - Mar 08, 2021

Patch to fix issue with prior docker image packaging workflow

Information - Updated Sep 10, 2022

Stars: 13
Forks: 9
Issues: 28

Repositories & Extras

Rust bindings for libinjection

Add libinjection to dependencies of Cargo

Rust bindings for libinjection

Rust bindings for the C++ api of PyTorch

LIghtweight wrapper for pytorch eg libtorch in rust

Rust bindings for the C++ api of PyTorch

Rust leveldb bindings

Almost-complete bindings for leveldb for Rust

Rust leveldb bindings

rust-analyzer is a modular compiler frontend for the Rust language

It also contains some tips & tricks to help you be more productive when using rust-analyzer

rust-analyzer is a modular compiler frontend for the Rust language

Rust-Lightning is a Bitcoin Lightning library written in Rust

lightning, does not handle networking, persistence, or any other I/O

Rust-Lightning is a Bitcoin Lightning library written in Rust

Rust FUSE - Filesystem in Userspace

Rust library crate for easy implementation of Crate documentation

Rust FUSE - Filesystem in Userspace

Rust crate to implement a counterpart to the PBRT book's (3rd edition) C++ code:

Some images of the test scenes are shown below, but you can find more

Rust crate to implement a counterpart to the PBRT book's (3rd edition) C++ code:

Rust Persian Calendar

1** provides functionality for conversion among Persian (Solar Hijri) and Gregorian calendars

Rust Persian Calendar

Include Handlebars Templates for Rocket Framework

This is a crate which provides macros handlebars_resources_initialize! and handlebars_response! to statically include HBS (Handlebars) files from your Rust project and make them be the...

Include Handlebars Templates for Rocket Framework


Clean boilerplate for graphql services using actix-web, rhai, async-graphql, surf, rbatis, graphql-client, handlebars-rust, jsonwebtoken, and mysql / postgresql



Clean boilerplate for graphql services using actix-web, rhai, async-graphql, surf, rbatis, graphql-client, handlebars-rust, jsonwebtoken, and mysql / postgresql



A collection of helpers for handlebars (rust) to manage string, json, yaml, toml, path, file, http request

Facebook Instagram Twitter GitHub Dribbble