Rethinking extensions.gnome.org
Background
While most of e.g.o. issues that didn't requires serious frontend changes were resolved in last 4 years it's hard to move forward with new UI features like full-featured user and author control panels.
Main UI problems:
- Current UI is based on old stuff like jQuery, require.js, Mustache. There is one messed-up js entry-point for all pages that binds some callbacks to page elements.
- It doesn't uses library-management tools, so we need to manually manage dependencies
- Our UI is splitted to Django templates and Javascript code that is unrelated to and not managed by Django.
Main Backend problems:
- We have mixed REST and non-REST endpoints
- Our REST endpoints doesn't have clear versioned URL scheme and doesn't follows simple CRUD
Proposal
We should completelly rethink website architecture and split frontend from backend.
Our backend should keep only (and mostly CRUD-capable) REST endpoints.
Our frontend should be rewriten with modern tools like npm and Vue.js that can be easy connected to backend REST endpoints.
Development
Backend development is carried out in the Infrastructure/extensions-web project.
Frontend development is carried out in the nE0sIghT/extensions-frontend project.
TODO
-
Reimplement current e.g.o. UI in Vue.js with BootstrapVue -
Redesign main page considering existing requests: -
Add recommended extensions carousel -
Add recent (both new and updated) extensions(#76 (closed))
-
-
Reimplement extensions search page -
Move search toolbar to navbar -
Add saveable URL
-
-
Reimplement Installed
page -
Reimplement registration and authentication using tokens -
Add License field to extension's versions -
Reimplement extension page -
Implement user control panel -
Implement extension author control panel -
Add ability to specify bug report link and drop e.g.o. bug report form -
Add extension categories and/or tags (1, 2) -
Add donation preferences -
Add ability to specify extension (OSI?) license -
Allow to share extensions maintainership -
Add some statistics for extension authors -
Add ability to abandon extension -
Rethink extension life cycle
-
-
-
Review backend URL endpoints -
Drop non-REST URLs -
Implement simple CRUD-capable REST endpoints using django-rest-framework
-
WIP frontend website
Edited by Yuri Konotopov