Goals for the project, relating to prototype/initial. As it stands the following have already been implemented:
[x] Basic structure of the project.
I opted for a basic React app, depending on solid-react-components rather than an app generated by generator-solid-react because the latter was quite bloated for our use.
[x] Basic site layout with text area (where you paste things)
[x] Save button to render the highlighted page content
Essentially, it does nothing of value at the moment, and doesn't even interact with Solid! There is a lot to be done.
I have divided the remaining goals related to the product into three categories.
MVP
These are the remaining features I believe we should have for an MVP. The "basic" functionality. First, I provide two (basically the only) user stories for the product with this basic functionality:
As a "paster," I want to paste content into the site and save it to my solid pod so that I may easily share it with a viewer.
As a "viewer," I want to receive a link to some paste and be able to view the contents as they were pasted by the paster.
I will use the terms "paster" and "viewer" to refer to the users of these stories throughout this document.
[x] Login
Provide a way for users to login. This should be required before saving.
The project currently depends on solid-react-components but makes no use of it. The ProviderLogin component can be used to provide basic authentication functionality with a Solid server.
(Track)
[x] Saving
Currently, the save button doesn't save anything, it only renders the content. My plan for the save functionality is as follows
Generate a hash of the content of the paste which will be used as the name of the file.
Make some association between that hash and the user who is currently logged in. This may be in a database or similar.
Upload the paste to the user's ./public/solid-paste directory in their pod. This is the data store for our app.
TODO: Verify that this is a conventional way to store data in a pod).
Note that I don't believe the Uploader component is a viable way to achieve this because it is principally a UI component. We might instead deal with solid-auth-client directly.
Also note that this information must be public because other users will be accessing it while note auth'd (See Serve request for pastes)
[x] Serve requests for pastes
The point of a paste site is to share. We need to serve requests of the form ourapp.com/hash.
In the Actually save things section, we established an association between the hash of a paste and the user who made it. Using these parts, we can construct the endpoint we need to hit to locate the paste.
To serve a viewer request for ourapp.com/hash, we construct the endpoint, make a request to the pod, and display the content.
[ ] Better styling
The site is ugly. I'm bad at CSS. A little bit of fiddling with the CSS could go a long way. Normally I would put this under Extra, but for better or worse, looks are very important for a project in this context.
(Track)
Completing these goals will complete both of the above user stories.
Extra
These are goals which I think we can complete which would not change the functionality or use of the product in major ways. Note that these goals may introduce new or change user stories which I have not written out.
[ ] Syntax highlighting
I have already included highlighting functionality with highlight.js and react-highlight in the initial prototype. However, it is quite buggy and I haven't put in any time to debug it. We should focus on the Finish Prototype goals before attempting to fix it.
(Track)
[ ] Language detection
An incredibly common use case for a paste site is to share code. This goal would involve automatically making an attempt to identify the programming language of the paste to determine the language in which it should be highlighted.
(Track)
[ ] Theme selection
Provide a simple selector for all of the themes provided by highlightjs.
(Track)
Stretch
These are goals which may be beyond our time frame as they could involve major restructuring of the product. These goals most certainly change and introduce new user stores which I have not written out.
[ ] Limited sharing
As it stands, all functionality of the product is based on public sharing. We are using the public store of a user's pod. Anyone with a link can view a paste. We could extend into limited/private sharing as well. Essentially, would mean that both the paster and the viewer must be auth'd throughout their use of the site. I have given no thought to the implementation of this feature.
(Track)
[ ] Shell client
Theoretically, it would be fairly simple to create a shell application to make pastes. For example, invoking it like solidpaste file.txt.
(Track)
[ ] Paste Manager
Add a way to display all of the pastes found in a user's pod in the pastes directory. They should be able to delete them from here.
Open question: should you be able to assign pastes names so that managing them is easier for users? This is the first place in the app where this would be very beneficial.
(Track)
Goals
Goals for the project, relating to
prototype/initial
. As it stands the following have already been implemented:[x] Basic structure of the project. I opted for a basic React app, depending on
solid-react-components
rather than an app generated bygenerator-solid-react
because the latter was quite bloated for our use.[x] Basic site layout with text area (where you paste things)
[x] Save button to render the highlighted page content
Essentially, it does nothing of value at the moment, and doesn't even interact with Solid! There is a lot to be done.
I have divided the remaining goals related to the product into three categories.
MVP
These are the remaining features I believe we should have for an MVP. The "basic" functionality. First, I provide two (basically the only) user stories for the product with this basic functionality:
As a "paster," I want to paste content into the site and save it to my solid pod so that I may easily share it with a viewer.
As a "viewer," I want to receive a link to some paste and be able to view the contents as they were pasted by the paster.
I will use the terms "paster" and "viewer" to refer to the users of these stories throughout this document.
[x] Login Provide a way for users to login. This should be required before saving.
The project currently depends on
solid-react-components
but makes no use of it. TheProviderLogin
component can be used to provide basic authentication functionality with a Solid server. (Track)[x] Saving Currently, the save button doesn't save anything, it only renders the content. My plan for the save functionality is as follows
Generate a hash of the content of the paste which will be used as the name of the file.
Make some association between that hash and the user who is currently logged in. This may be in a database or similar.
Upload the paste to the user's
./public/solid-paste
directory in their pod. This is the data store for our app.TODO: Verify that this is a conventional way to store data in a pod).
Note that I don't believe the
Uploader
component is a viable way to achieve this because it is principally a UI component. We might instead deal withsolid-auth-client
directly.Also note that this information must be public because other users will be accessing it while note auth'd (See
Serve request for pastes
)Redirect the user to
ourapp.com/hash
.(Track)
[x] Serve requests for pastes The point of a paste site is to share. We need to serve requests of the form
ourapp.com/hash
.Actually save things
section, we established an association between the hash of a paste and the user who made it. Using these parts, we can construct the endpoint we need to hit to locate the paste.ourapp.com/hash
, we construct the endpoint, make a request to the pod, and display the content.(Track)
[ ] Better styling The site is ugly. I'm bad at CSS. A little bit of fiddling with the CSS could go a long way. Normally I would put this under
Extra
, but for better or worse, looks are very important for a project in this context. (Track)Completing these goals will complete both of the above user stories.
Extra
These are goals which I think we can complete which would not change the functionality or use of the product in major ways. Note that these goals may introduce new or change user stories which I have not written out.
[ ] Syntax highlighting I have already included highlighting functionality with
highlight.js
andreact-highlight
in the initial prototype. However, it is quite buggy and I haven't put in any time to debug it. We should focus on theFinish Prototype
goals before attempting to fix it. (Track)[ ] Language detection An incredibly common use case for a paste site is to share code. This goal would involve automatically making an attempt to identify the programming language of the paste to determine the language in which it should be highlighted. (Track)
[ ] Theme selection Provide a simple selector for all of the themes provided by highlightjs. (Track)
Stretch
These are goals which may be beyond our time frame as they could involve major restructuring of the product. These goals most certainly change and introduce new user stores which I have not written out.
[ ] Limited sharing As it stands, all functionality of the product is based on public sharing. We are using the
public
store of a user's pod. Anyone with a link can view a paste. We could extend into limited/private sharing as well. Essentially, would mean that both the paster and the viewer must be auth'd throughout their use of the site. I have given no thought to the implementation of this feature. (Track)[ ] Shell client Theoretically, it would be fairly simple to create a shell application to make pastes. For example, invoking it like
solidpaste file.txt
. (Track)[ ] Paste Manager Add a way to display all of the pastes found in a user's pod in the pastes directory. They should be able to delete them from here.
Open question: should you be able to assign pastes names so that managing them is easier for users? This is the first place in the app where this would be very beneficial. (Track)