Skip to content

Commit

Permalink
Version Update from v0.7.0 to v0.8.0 (#371)
Browse files Browse the repository at this point in the history
Version update here will be from v0.7.0 to v0.8.0 for the Master branch. Will create a new v0.8.0 Release after we got this merged into Master.

Major updates since last version includes:

Adjustments to set permission forms (Issue 307/use webID to set permissions #349)
Refactoring of the Footer component (Refactor Footer #364)
Ability to upload via camera for mobile (Issue 335/device camera uploads #357)
Updates to new message modal (Issue 286/new message styling #330)
Fixes to:

Linter and Prettier script (Issue 368/fix-eslint-prettier-windows #369)
The sendMessageTTL function (Issue 365/update-sendMessageTTL #366)
Others:

Documentation updates (Updates ROADMAP.md to conform to other doc styling #374)

Co-authored-by: Tim Standen <[email protected]>

---------

Co-authored-by: veganedge <[email protected]>
Co-authored-by: Scott Brown <[email protected]>
Co-authored-by: Andy <[email protected]>
Co-authored-by: Russell Fraze <[email protected]>
Co-authored-by: Andy Williams <[email protected]>
Co-authored-by: Tim Standen <[email protected]>
Co-authored-by: Jared Krajewski <[email protected]>
Co-authored-by: Tim Standen <[email protected]>
Co-authored-by: brancwill <[email protected]>
Co-authored-by: Radhey Chitroda <[email protected]>
Co-authored-by: Hauvert <[email protected]>
Co-authored-by: tryngagear <[email protected]>
Co-authored-by: jlaurentpdx <[email protected]>
  • Loading branch information
14 people authored Aug 11, 2023
1 parent 6164b57 commit 5cb26fe
Show file tree
Hide file tree
Showing 26 changed files with 704 additions and 544 deletions.
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,9 @@ PASS is currently in Development heading towards [Minimum Viable Product](./docs

Currently we require Node version 16 or higher and NPM for our package manager. Most places recommend using a node version manager to install node and npm. To proceed using NVM perform the following..

1. Download NVM for your system. Find instructions here: https://github.com/nvm-sh/nvm
1. Download NVM for your system.
- For Mac, Linux, and other POSIX users: https://github.com/nvm-sh/nvm
- For Windows users: https://github.com/coreybutler/nvm-windows

2. Install node version 16:
```
Expand Down
95 changes: 56 additions & 39 deletions docs/ROADMAP.md
Original file line number Diff line number Diff line change
@@ -1,44 +1,61 @@
# Purpose of PASS and MVP Outline

## Project Goals
## Contents

The ultimate purpose of this project is to create a decentralized, federated system that puts users in control of their own data. Primarily home-insecure individuals who are most at risk of losing their important documents. We have validated through the Portland State University Homelessness Research & Action Collaborative (HRAC) that keeping important documents safe and available is a major problem of the housing insecure community and there are no good offerings today.
1. [Project Goals](#1-project-goals)
2. [Target User](#2-target-user)
3. [Features and Core Flows](#3-features-and-core-flows)
- [Case Manager](#case-manager-1)
- [Client](#client-1)
- [Organization](#organization-1)

Similar efforts are being done in Baltimore, New York, and Los Angeles, as well as internationally, but they have yet to show success. None of them, though, have attempted to design a decentralized, federated system.
In discussions with Baltimore, they said they had a great deal of help from their local Lived Experience Committee team. Multnomah has a similar team https://www.multco.us/johs/lived-experience-advisory-committee.
## 1. Project Goals

If we wish for a project of this complexity to succeed, we will need the advice and support of people like the Lived Experience Advisory Committee to guide its development. However, it will be difficult to gain their support if we do not clearly demonstrate that a product like PASS is both:
`Technically possible & Actually useful`
The ultimate purpose of this project is **to create a decentralized, federated system that puts users in control of their own data** - primarily home-insecure individuals who are most at risk of losing their important documents. We have validated through the [Portland State University Homelessness Research & Action Collaborative (HRAC)](https://www.pdx.edu/homelessness/) that keeping important documents safe and available is a major problem of the housing-insecure community and there are no good offerings today.

Similar efforts are being done in Baltimore, New York, and Los Angeles, as well as internationally, but they have yet to show success. None of them, though, have attempted to design a decentralized, federated system. In discussions with Baltimore, they said they had a great deal of help from their local Lived Experience Committee team. Multnomah County has a similar team ([see JOHS Lived Experience Advisory Committee](https://www.multco.us/johs/lived-experience-advisory-committee)).

If we wish for a project of this complexity to succeed, we will need the advice and support of people like the Lived Experience Advisory Committee to guide its development. However, it will be difficult to gain their support if we do not clearly demonstrate that a product like PASS is both
**technically possible** _and_ **actually useful**.

The goal of this MVP is to provide such a demonstration. It will not be a complete or marketable app, but it does need to be strong, stable, and clean enough to be understandable to the target audience.
Target User
The PASS MVP Target User will be a `Case Manager`. However, in order to best facilitate the work case managers will do in PASS, we will need to handle two other types of user as well: `Clients`, and `Organizations`

`Case Manager` - A social worker who assists individuals experiencing home insecurity in receiving aid. The case manager may work for the government, or for a non-profit or mutual aid organization. The case manager is a professional with no particular computer program who could be working with several clients at a time in a variety of social situations, from stable office work to physically dangerous interactions
Client - An individual working with a case manager. The data stored in a PASS pod will belong to the client, and the logic around PASS will be processing the client’s own data. We generally expect clients to be people experiencing home insecurity in need of social support. They may not have a computer of their own, or even a permanent address.
Organization - A government, non profit, or mutual aid organization to whom the case manager belongs. We can assume the organization is large enough to have a system administrator or tech director who could set up and organize PASS hosting.
## 2. Target User

The PASS _MVP Target User_ will be a **Case Manager**. However, in order to best facilitate the work case managers will do in PASS, we will need to handle two other types of user as well: **Clients** and **Organizations**.

### Case Manager
A social worker who assists individuals experiencing home insecurity in receiving aid. The case manager may work for the government, or for a non-profit or mutual aid organization. The case manager is a professional with no particular computer program who could be working with several clients at a time in a variety of social situations, from stable office work to physically dangerous interactions.

### Client
An individual working with a case manager. The data stored in a PASS pod will belong to the client, and the logic around PASS will be processing the client’s own data. We generally expect clients to be people experiencing home insecurity in need of social support. They may not have a computer of their own, or even a permanent address.

### Organization
A government, non profit, or mutual aid organization to whom the case manager belongs. We can assume the organization is large enough to have a system administrator or tech director who could set up and organize PASS hosting.

## Features and Core Flows
## 3. Features and Core Flows

`Case Manager`
### Case Manager

**When a case manager sits down next to a client experiencing home insecurity, the system will be able to:**

Set the client up with a Solid Pod and Web ID
Create a PASS-specific container in the pod
Grant the case manager read-append access to the PASS container
Grant affiliate organizations read access to the PASS container
Create a client profile for the case manager to reference, containing the client’s Web ID, contact information, notes about the client's current needs and application status, and any other system-specific information about the client.
The client’s profile should include an address, but due to their home insecure nature, this ‘address’ could take several forms
A traditional mailing address
What Three Words
Cross Street
A government address provided by local laws.
**Note:** The Web ID will be generated and stored by the system. The case manager will not need to interact with it, but the client will need to remember their web ID and password if they want to access their pod themselves later.
- Set the client up with a Solid Pod and Web ID
- Create a PASS-specific container in the pod
- Grant the case manager read-append access to the PASS container
- Grant affiliate organizations read access to the PASS container
- Create a client profile for the case manager to reference, containing the client’s Web ID, contact information, notes about the client's current needs and application status, and any other system-specific information about the client.

The client’s profile should include an address, but due to their home insecure nature, this ‘address’ could take several forms:
- A traditional mailing address
- What Three Words
- Cross Streets
- A government address provided by local laws.

_Note:_ The Web ID will be generated and stored by the system. The case manager will not need to interact with it, but the client will need to remember their web ID and password if they want to access their pod themselves later.
This profile may be stored in the PASS system or on the client's pod
Automatically add the client’s profile to the case manager’s list of active clients

**The case manager should also be able to do the following without needing the client to be present:**
**The case manager should also be able to do the following _without_ needing the client to be present:**

Request additional access permissions to other parts of the client's pod (or parts that were previously revoked)
Upload documents to the client's pod on behalf of the client
Expand All @@ -50,32 +67,32 @@ Take private notes about the client only visible within their organization that
Message and share notes with other members of their organization
Use PASS on either desktop or mobile

---

`Client`

The client should be able to do the following things without needing assistance from the case manager:
View all files in their pod
Take all data in their pod from one organization to another, and still have it be readable at the new organization
Change access permissions to different parts of their pod
Approve/Deny access requests from case managers or organizations
Subscribe to new case managers to begin receiving services and grant them pod access
Unsubscribe from a case manager they are no longer working with, revoking pod access
Message their case managers
Access and manage their files outside of PASS so long as they retain pod access
Use PASS on either a phone or a desktop
### Client

**The client should be able to do the following things _without_ needing assistance from the case manager:**

- View all files in their pod
- Take all data in their pod from one organization to another, and still have it be readable at the new organization
- Change access permissions to different parts of their pod
- Approve/Deny access requests from case managers or organizations
- Subscribe to new case managers to begin receiving services and grant them pod access
- Unsubscribe from a case manager they are no longer working with, revoking pod access
- Message their case managers
- Access and manage their files outside of PASS so long as they retain pod access
- Use PASS on either a phone or a desktop

---

`Organization`
### Organization

An organization using PASS should be able to:
Use any Pod server of their choice, hosted locally or by a Cloud Service Provider
Choose to either host the PASS application themselves, or use an external host
Enroll new case managers in their organization
View the files generated by a case manager about their clients


User flows for case managers and clients should be clean and accessible to non-technical users. Organization administration flows can be more complex, and assume a level of technical knowledge from the user.

**[⬆️ Back to Top](#purpose-of-pass-and-mvp-outline)**
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -12,10 +12,10 @@
"preview": "vite preview",
"docs": "jsdoc --readme ./docs/README.md -c jsdoc.config.json",
"docs:clear": "node clearDocs.js",
"lint": "eslint 'src/**/*.js' 'src/**/*.jsx' 'test/**/*.js' 'test/**/*.jsx' '__mocks__/**/*.js'",
"lint:fix": "eslint --fix 'src/**/*.js' 'src/**/*.jsx' 'test/**/*.js' 'test/**/*.jsx' '__mocks__/**/*.js'",
"prettier:check": "prettier --check 'src/**/*.js' 'src/**/*.jsx' 'test/**/*.js' 'test/**/*.jsx'",
"prettier:run": "prettier --write 'src/**/*.js' 'src/**/*.jsx' 'test/**/*.js' 'test/**/*.jsx'",
"lint": "eslint \"src/**/*.js\" \"src/**/*.jsx\" \"test/**/*.js\" \"test/**/*.jsx\" \"__mocks__/**/*.js\"",
"lint:fix": "eslint --fix \"src/**/*.js\" \"src/**/*.jsx\" \"test/**/*.js\" \"test/**/*.jsx\" \"__mocks__/**/*.js\"",
"prettier:check": "prettier --check \"src/**/*.js\" \"src/**/*.jsx\" \"test/**/*.js\" \"test/**/*.jsx\"",
"prettier:run": "prettier --write \"src/**/*.js\" \"src/**/*.jsx\" \"test/**/*.js\" \"test/**/*.jsx\"",
"podserver:temp": "community-solid-server",
"podserver": "community-solid-server -c @css:config/file.json -f local_temp_server_files/"
},
Expand Down
124 changes: 5 additions & 119 deletions src/components/Footer/Footer.jsx
Original file line number Diff line number Diff line change
@@ -1,138 +1,24 @@
// React Imports
import React from 'react';
// Other Library Imports
import dayjs from 'dayjs';
// Material UI Imports
import Box from '@mui/material/Box';
import Button from '@mui/material/Button';
import Container from '@mui/material/Container';
import Divider from '@mui/material/Divider';
import Link from '@mui/material/Link';
import Stack from '@mui/material/Stack';
import Typography from '@mui/material/Typography';
import useMediaQuery from '@mui/material/useMediaQuery';
import { useTheme } from '@mui/material/styles';
// Material Icons Imports
import TwitterIcon from '@mui/icons-material/Twitter';
import FacebookIcon from '@mui/icons-material/Facebook';
import InstagramIcon from '@mui/icons-material/Instagram';

// top section of footer
const RenderCallToActionSection = ({ isReallySmallScreen }) => (
<Stack width={isReallySmallScreen ? 1 : 3 / 5} alignItems="center" justifyContent="center">
<Typography variant="h5" color="tertiary.main">
Want to partner with PASS?
</Typography>
<Typography variant="body1" color="#fff" sx={{ width: 3 / 4 }}>
If your organization is interested in partnering with PASS and would like to discuss further,
contact us below.
</Typography>
<Button variant="contained" color="secondary" sx={{ my: '1rem', width: 1 / 2 }}>
Proposal
</Button>
</Stack>
);

const socialLinks = [
{
href: 'https://twitter.com/',
icon: <TwitterIcon />
},
{
href: 'https://www.facebook.com/',
icon: <FacebookIcon />
},
{
href: 'https://www.instagram.com/',
icon: <InstagramIcon />
}
];

// middle section of footer
const RenderCompanyInfoSection = ({ isReallySmallScreen }) => (
<Stack
width={isReallySmallScreen ? 1 : 1 / 5}
spacing={2}
justifyContent="space-around"
alignItems="center"
>
<Box>
<Typography color="tertiary.main">PASS LOGO</Typography>
<Typography color="#fff">tagline</Typography>
</Box>
<Box>
<Typography color="tertiary.main">Follow Us</Typography>
<Stack direction="row" spacing={1}>
{socialLinks.map(({ href, icon }) => (
<Link key={href} href={href} target="_blank" rel="noopener" color="#fff">
{icon}
</Link>
))}
</Stack>
</Box>
<Box>
<Typography color="tertiary.main">Built By:</Typography>
<Link href="https://www.codeforpdx.org/" target="_blank" rel="noopener">
<Typography variant="body2" color="#fff">
C4PDX LOGO
</Typography>
</Link>
</Box>
</Stack>
);

const legalLinks = [
{
href: 'https://www.codeforpdx.org/',
title: 'Privacy Policy'
},
{
href: 'https://www.codeforpdx.org/',
title: 'Terms and Conditions'
},
{
href: 'https://www.codeforpdx.org/',
target: '_blank',
rel: 'noopenner',
ml: 0.5,
text: ${dayjs().year()}`,
title: 'Code for PDX'
}
];

// bottom section of footer
const RenderCopyrightAndLinksSection = ({ isReallySmallScreen }) => (
<Stack
orientation="column"
width={isReallySmallScreen ? 1 : 1 / 5}
spacing={2}
justifyContent="space-around"
>
{legalLinks.map((link) => (
<Typography key={link.title} variant="body2" color="tertiary.main">
{link.text ?? null}
<Link
href={link.href}
underline="none"
color="tertiary.main"
target={link.target ?? null}
rel={link.rel ?? null}
ml={link.ml ?? null}
>
{link.title}
</Link>
</Typography>
))}
</Stack>
);
// Component Imports
import RenderCallToActionSection from './RenderCallToActionSection';
import RenderCompanyInfoSection from './RenderCompanyInfoSection';
import RenderCopyrightAndLinksSection from './RenderCopyrightAndLinksSection';

/**
* Footer Component - Generates the responsive footer used in PASS
*
* @memberof Footer
* @name Footer
* @returns {React.JSX.Element} The Footer component
*/

const Footer = () => {
const theme = useTheme();
const isSmallScreen = useMediaQuery(theme.breakpoints.down('md'));
Expand Down
34 changes: 34 additions & 0 deletions src/components/Footer/RenderCallToActionSection.jsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
// React Imports
import React from 'react';
// Material UI Imports
import Button from '@mui/material/Button';
import Stack from '@mui/material/Stack';
import Typography from '@mui/material/Typography';

/**
* @typedef {import("../../typedefs.js").footerProps} footerProps
*/

/**
* The RenderCallToActionSection component renders information about policy,
* terms and conditions, and the site to Code for PDX
*
* @param {footerProps} Props - The props for footer sub-component
* @returns {React.JSX.Element} The RenderCallToActionSection component
*/
const RenderCallToActionSection = ({ isReallySmallScreen }) => (
<Stack width={isReallySmallScreen ? 1 : 3 / 5} alignItems="center" justifyContent="center">
<Typography variant="h5" color="tertiary.main">
Want to partner with PASS?
</Typography>
<Typography variant="body1" color="#fff" sx={{ width: 3 / 4 }}>
If your organization is interested in partnering with PASS and would like to discuss further,
contact us below.
</Typography>
<Button variant="contained" color="secondary" sx={{ my: '1rem', width: 1 / 2 }}>
Proposal
</Button>
</Stack>
);

export default RenderCallToActionSection;
Loading

0 comments on commit 5cb26fe

Please sign in to comment.