Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
41 commits
Select commit Hold shift + click to select a range
f5092eb
Update project name from Lumache to Unify
Adefola-lab Feb 23, 2026
f425fe4
Revise usage instructions for starting database and app
alcajuice Mar 18, 2026
e88c50e
Add login and sign up section to documentation
alcajuice Mar 18, 2026
61c51cd
Revise documentation for Unify project
alcajuice Mar 18, 2026
e16a2b8
Add 'joinsoc' and 'review' to the documentation index
alcajuice Mar 25, 2026
14fa59c
Create joinsoc.rst
alcajuice Mar 25, 2026
5538dfc
Add joining and leaving instructions for society
alcajuice Mar 25, 2026
8cf0e55
Update login documentation to reflect joining process
alcajuice Mar 25, 2026
de5ffec
Modify usage.rst for backend and frontend instructions
alcajuice Mar 25, 2026
64d7083
Create review instructions in review.rst
alcajuice Mar 25, 2026
6ffa35e
Update login documentation and add sign up section
alcajuice Mar 25, 2026
e7e4a04
Update project information in conf.py
alcajuice Apr 22, 2026
2cfda2e
Update review visibility explanation
alcajuice Apr 22, 2026
bbba9eb
Add Temp file to images directory
alcajuice Apr 22, 2026
8f37e02
Add files via upload
alcajuice Apr 22, 2026
ad0dabd
Add images to login and signup documentation
alcajuice Apr 22, 2026
d5f2ef5
Update login documentation with sign up details
alcajuice Apr 22, 2026
43887be
Fix formatting and punctuation in login documentation
alcajuice Apr 22, 2026
a3fe2e3
Update review.rst
alcajuice Apr 22, 2026
a693e83
Delete docs/source/images/Temp
alcajuice Apr 22, 2026
85f6027
Create database.rst
alcajuice Apr 22, 2026
77fb778
Add admin account creation instructions for database access
alcajuice Apr 22, 2026
fe4fd1e
Add admin account creation instructions
alcajuice Apr 22, 2026
f3bcbd8
Update database documentation with superuser instructions
alcajuice Apr 22, 2026
bbbbab5
Add 'database' section to index.rst
alcajuice Apr 22, 2026
8cf86eb
Update database.rst
alcajuice Apr 22, 2026
be0606a
Update database.rst
alcajuice Apr 22, 2026
f8cc7c6
Add files via upload
alcajuice Apr 22, 2026
0e27897
Create Frontend.rst
alcajuice Apr 29, 2026
f015287
Update index.rst
alcajuice Apr 29, 2026
600ccfa
Rename database.rst to Database.rst
alcajuice Apr 29, 2026
02cca94
Add overview of front end choices by device
alcajuice Apr 29, 2026
3efbc4f
Document frontend colour theme and specifications
alcajuice Apr 29, 2026
9241a21
Update Frontend.rst with additional colour definitions
alcajuice Apr 29, 2026
d26e769
Add code block for text colour styling
alcajuice Apr 29, 2026
7c90078
Update frontend documentation with fonts and colors
alcajuice Apr 29, 2026
2414a6a
Fix code block syntax for text colour section
alcajuice Apr 29, 2026
ec7d53c
Fix formatting in Frontend.rst documentation
alcajuice Apr 29, 2026
9db5451
Update Frontend.rst
alcajuice Apr 29, 2026
23d4abd
Add documentation for main.dart and navigation bar
alcajuice Apr 29, 2026
2fbb8b3
Update Frontend documentation with new sections
alcajuice Apr 29, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions docs/source/Database.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
Viewing the database
=============

.. _database:

Creating and admin account
-----------------

To view the database, you first need to create an admin account. While the database is onlinee, paste the following into a new terminal:

.. code-block:: console

cd backend
python manage.py createsuperuser

Then follow the prompts to create a username and password. Since the database is only available from your desktop (as this is a work-in-progress project), it can be as simple as admin/admin.


Accessing the database
---------------------

To view the contents of the database, follow this `link <http://127.0.0.1:8000/admin>`_. This will only be accessible if the database is runing on your current device. You will be redirected to a page with a username and password. Use the details from the superuser prompt to log in.

Navigating the database
-----------------------

After logging in, all tables will be visible. If you sign up on the sign up page in the website, it will appear in the users table. You can use this feature to track all data within the database.

.. image:: images/Database.png
302 changes: 302 additions & 0 deletions docs/source/Frontend.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,302 @@

Frontend
=============

Overview
=============

The front end of this application is different each device. This doc will cover some of the front end choices and inner workings, but in terms of what you can expect to see throughout the app, you can find:

Fonts
-----

Android: Roboto

iOS/macOS: San Francisco

Windows: Segoe UI

Linux/web: platform/browser default sans-serif chosen by Flutter


Colours
-------

One consistent colour theme, featuring the colours represented in the University of Portsmouth logo.

Seed colour: 0xFF003087

Primary colour: 0xFF003087

Secondary colour: 0xFF7B2D8E

Background colour: 0x29FFFFFF

Error colour: 0xFFBA1A1A

Text colour: Not fixed, readable contrast via code:

.. code-block:: dart

style: Theme.of(context).textTheme.headlineSmall?.copyWith(
fontWeight: FontWeight.w700,

Pages
======

main.dart
---------

Theme
------

.. code-block:: dart

class UnifyApp extends StatelessWidget {
const UnifyApp({super.key});

@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Unify - University of Portsmouth Societies',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(
seedColor: const Color(0xFF003087), // UoP Blue
primary: const Color(0xFF003087), // UoP Blue
secondary: const Color(0xFF7B2D8E), // UoP Purple
),
appBarTheme: const AppBarTheme(
foregroundColor: Colors.white,
iconTheme: IconThemeData(color: Colors.white),
),
useMaterial3: true,
),
home: const HomePage(),
);
}
}

This section of code initialises the color scheme throughout the whole program, the navigation bar color scheme, annd ensures it is the first page shown to the user when starting the app.

User login data
----------------

.. code-block:: dart

class _HomePageState extends State<HomePage> {
static const String _sessionUserStorageKey = 'unify.current_user';

This section of code uses a const key for saving/loading the user login data by storing it in local storage.

Navigation Bar
---------------

.. code-block:: dart

IconButton(
tooltip: 'Account',
onPressed: _openAuthPage,
icon: const Icon(Icons.person, color: Colors.white),
),
TextButton(
onPressed: _openAboutUsPage,
child: const Text(
'About Us',
style: TextStyle(color: Colors.white, fontSize: 16),
),
),
],
bottom: PreferredSize(
preferredSize: Size.fromHeight(_showHeaderSearch ? 72 : 0),
child: _showHeaderSearch
? Padding(
padding: const EdgeInsets.fromLTRB(16, 0, 16, 12),
child: TextField(
controller: _searchController,
focusNode: _searchFocusNode,
textInputAction: TextInputAction.search,
onSubmitted: _openSearchResultsPage,
decoration: InputDecoration(
hintText: 'Search societies, e.g. "Art", "Gaming"',
prefixIcon: const Icon(Icons.search),
suffixIcon: IconButton(
icon: const Icon(Icons.arrow_forward),
onPressed: _openSearchResultsPage,
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(14.0),
borderSide: BorderSide.none,
),
filled: true,
fillColor: Colors.white,
),
),
)
: const SizedBox.shrink(),
),
),

This section of code creates the Navigation Bar at the top of the page. It creates a Account button which links to the login page, an About us button which links to the About Us page, and a search bar used to search for societies. These are all in the far right of the navigation bar, and the search bar extends when pressed.

Intro Text
-----------

.. code-block:: dart

body: SafeArea(
child: SingleChildScrollView(
padding: const EdgeInsets.fromLTRB(16, 14, 16, 24),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Welcome${_currentUser == null ? '' : ', ${_currentUser!['name'] ?? 'back'}'}',
style: Theme.of(context).textTheme.headlineSmall?.copyWith(
fontWeight: FontWeight.w700,
),
),
const SizedBox(height: 8),
Text(
'Find societies that match your interests and connect with students faster.',
style: Theme.of(
context,
).textTheme.bodyMedium?.copyWith(height: 1.35),
),

This code displays the text at the top of the page, "Welcome" and "Find societies that match your interests and connect with students faster"

Joined societies list - Logged in + Not in any society
-------------------------------------------------------

.. code-block:: dart

if (joined.isEmpty) {
return Card(
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
child: Padding(
padding: const EdgeInsets.all(12.0),
child: Row(
children: [
const Icon(Icons.info_outline),
const SizedBox(width: 12),
Expanded(
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
mainAxisSize: MainAxisSize.min,
children: [
const Text(
'You haven\'t joined any societies yet',
style: TextStyle(
fontWeight: FontWeight.w700,
),
),
const SizedBox(height: 6),
Text(
'Tap "Find societies" to browse and join groups.',
style: TextStyle(
color: Colors.grey.shade700,
),
),
],
),
),
TextButton(
onPressed: _openSocietiesPage,
child: const Text('Find societies'),
),
],
),
),
);
}


Joined societies list - Logged in + In a society
------------------------------------------------

..code-block:: dart

return Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: [
Text(
'Your societies',
style: Theme.of(context).textTheme.titleMedium
?.copyWith(fontWeight: FontWeight.w700),
),
const SizedBox(height: 8),
SizedBox(
height: 140,
child: ListView.separated(
scrollDirection: Axis.horizontal,
itemCount: joined.length,
separatorBuilder: (_, __) =>
const SizedBox(width: 12),
itemBuilder: (context, index) {
final s = joined[index];
return InkWell(
onTap: () => _navigateToSocietyDetails(
s,
initialJoined: true,
),
child: SizedBox(
width: 220,
child: Card(
clipBehavior: Clip.antiAlias,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
child: Padding(
padding: const EdgeInsets.all(12.0),
child: Row(
children: [
CircleAvatar(
radius: 28,
child: Icon(s.icon, size: 28),
),
const SizedBox(width: 12),
Expanded(
child: Column(
crossAxisAlignment:
CrossAxisAlignment.start,
mainAxisAlignment:
MainAxisAlignment.center,
children: [
Text(
s.name,
style: const TextStyle(
fontWeight: FontWeight.w700,
),
overflow:
TextOverflow.ellipsis,
),
const SizedBox(height: 6),
Text(
'${s.memberCount} members · ${s.rating} ★',
maxLines: 1,
overflow: TextOverflow.ellipsis,
style: TextStyle(
color: Colors.grey.shade700,
),
),
],
),
),
],
),
),
),
),
);
},
),
),
const SizedBox(height: 12),
],
);
},



7 changes: 0 additions & 7 deletions docs/source/api.rst

This file was deleted.

6 changes: 3 additions & 3 deletions docs/source/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@

# -- Project information

project = 'Lumache'
copyright = '2021, Graziella'
author = 'Graziella'
project = 'Unify'
copyright = '2026, Unify'
author = 'Joshua Rae Alcazar'

release = '0.1'
version = '0.1.0'
Expand Down
Binary file added docs/source/images/Database.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/source/images/Login.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/source/images/Signup.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs/source/images/SocietyReview.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
22 changes: 16 additions & 6 deletions docs/source/index.rst
Original file line number Diff line number Diff line change
@@ -1,10 +1,7 @@
Welcome to Lumache's documentation!
Welcome to Unify's documentation!
===================================

**Lumache** (/lu'make/) is a Python library for cooks and food lovers
that creates recipes mixing random ingredients.
It pulls data from the `Open Food Facts database <https://world.openfoodfacts.org/>`_
and offers a *simple* and *intuitive* API.
Unify is a student created, university focused website focused on societies, students and ease of access.

Check out the :doc:`usage` section for further information, including
how to :ref:`installation` the project.
Expand All @@ -19,4 +16,17 @@ Contents
.. toctree::

usage
api
login
joinsoc
review
database


.. toctree::

Frontend
Backend
Database


Unify hosts its documentation on Read the Docs.
Loading