-
Notifications
You must be signed in to change notification settings - Fork 0
old MVP
This is still a work in progress. It needs more added, and probably needs some culled, too.
I’m not really sure how much of this should be in the “minimum” viable product - I want all of this functionality, but am not sure where to draw the line for what is “minimum”. Maybe I need to cut it way back?
I have PHP code that handles a lot of this functionality already, so a lot of it will be able to be ported instead of written from scratch. Also, many parts of this functionality have already been through one or more iterations, since I’ve built the same functionality in other languages and frameworks.
One problem I’m having in particular is that, while everything is kind of separated into its own group of concerns, there are little leaks between different sections that I don’t see any way to cure. Bills are a type of Transaction, and Transactions are a part of a Creation, and ShopItems are Things, and Photographs are Images of Objects, etc.
- This stuff may be too abstract to approach yet.
- Might be best to just utilize HTML (org-mode export? Zim wiki integration?) and some form of static-ish pages.
- I want to have ad-hoc database access, which may be ugly.
- Will generate cached pages to avoid slow load times.
- I want to have ad-hoc database access, which may be ugly.
- Folders are in a hierarchy (mptt?)
- Every row in every database is associated with a Folder.
- The database table has a folder above its rows in the Folder hierarchy.
- Like a directory, a folder has a name and directory contents.
- Each Folder has an Inscription, which gives it a powerful way to communicate its contents (and more).
- Custom filters may be defined for Folders.
- Custom Folders may be made with static filters.
- For example:
- one folder may contain all products (no filters)
- another may contain all marbles
- another folder might contain all products under $20.
- For example:
- Custom Folders may be made with static filters.
- Folders do not have to be associated with any database row or table at all.
- If a folder exists, and then a database row is later created that uses its namespace
- the user will be asked what to do, with the default action being a merge, and the first option being to rename the folder
- If a folder exists, and then a database row is later created that uses its namespace
- Every Folder has an FolderCover.
- Uses a special wiki-type text field that allows other tables and rows to be referred to.
- For example, it might include [Thing 363][main_image], or [Thing 363][url].
- Basic implementation is HTML with some variables for retrieving data.
Internal Backlinks are pulled from Inscriptions and stored in a database. Thus, we can easily find all links to Product 363. These should be filterable - for example, we might want to find all Tools that mention Product 363.
For now, might not need to be anything beyond Django’s views.
- Custom Templates may be provided for any Folder’s subfolders.
- Templates provide a custom way to lay out content.
- Templates may be applied to individual folders.
For now, might not need to be anything beyond Django’s views.
- Guages are ways to display a single unit of data.
- This is more a guideline than a rule.
- A Guage may access any data available to the folder it is embedded in.
- Guages use the same markup as Inscriptions.
- Guages may be embedded in FolderTemplates and Inscriptions.
For now, might not need to be anything beyond Django’s views.
- The purpose of Dashboards is to combine Guages into a meaningful set.
- Dashboards are only conceptually different than Guages - there is no difference in implementation.
- Dashboards may contain other Dashboards.
- Guages may contain Dashboards, but that would be bad practice.
- I only mention that it’s possible to reiterate that Guages and Dashboards are the same.
https://github.com/coddingtonbear/django-measurement
https://github.com/django-money/django-money
- A project is a defined outcome to be achieved.
- It is an objective.
- Projects are hierarchical - some projects have sub-projects.
- Projects and tasks are very similar.
- both can have:
- status
- maybe, deferred, ready, started, waiting, delegated, done, canceled
- due datetime
- scheduled datetime
- priority
- A=high, B=medium, C=low (should be easy to customize)
- Person as AssignedTo
- status
- both can have:
- Sometimes Tasks will grow into Projects, and sometimes Projects will shrink into Tasks.
-
It should be easy to convert a Project into a Task and vice-versa.Tasks and Projects are different enough that this could get complex, and should be done later.
- Tasks cannot have sub-projects or sub-tasks, so there should be a check when converting
-
- Tasks are concrete steps to achieve the objective of the Project.
- A task must be doable, like in the Getting Things Done system.
- Tasks should be sortable.
date scheduled must be set for time scheduled to be set
- A list of time estimates - first is first, last is most recent.
- Always refers to the total amount of time to complete the task - not just time remaining.
The most recent time estimate.
- calculated using most recent time estimate minus time spent
- if it is updated, a new time estimate is made by adding it to time spent
calculated from TaskWork - not stored in this table
Whereas a Project is a concrete set of specific actions, a Recipe is more of a template for a Project.
- It should be fairly easy to use a Recipe as a template for a Project.
- It should be fairly easy to derive a Recipe from a Project.
Whereas a Project has Tasks, a Recipe has Steps. Steps should be sortable.
- Things are actual objects in the physical world.
- Each physical thing is going to have a different set of measurements.
- Some, like spheres, might have only diameters.
- Others, like spinning tops, might have:
- a “spin time” to measure how long they can spin
- a height
- a diameter
- A Thing might have a monetary value.
- Like other measurements, the accuracy of the measurement depends on the skill of the measurer.
- Unlike other measurements, monetary value is not a very concrete concept.
- What some people sell as art for millions is really more of a tax fraud.
- What other people sell as art for millions may actually be worth it.
- It’s hard to know the difference.
- A thing might be made of many other things.
- Parts should be easily removable
- paint is not a part, but a material.
- a bolt is a part
- Parts should only be defined if it seems useful to do so.
- If this Thing is a bolt in a larger machine
- then this Thing is a Part and the machine is the Conglomerate.
Creation is an inter-mixing of actions and the things they produce
The giving of a thing, some time, and the creative forces at my disposal (thought, training, intuition, etc.) to gain another thing may be thought of as a transaction.
- On the opposite end of this transaction from myself is … ?
- This sort of transaction is where righteous wealth should be built.
Maybe the person should not be related here, but just referenced through the Transaction?
Even if a hundred people helped make a Tool album, Tool is the Artist. But, then, there are collaborations between bands, so there should be many Artists.
- Components are destroyed in the process of creation.
- Components may be either entirely destroyed or partially.
- For example, using some tape does not destroy the whole role, but it does take some of it.
- This is a material of manufacture.
- Unlike Components, Materials cannot be easily removed from the Product.
- This does not refer to a category of Materials, but a specific instance.
- For example, not “a banana,” but “this banana”.
Transaction it was acquired in
Should this even exist, or should it be subcategory “Thing/Material/…”
Unlike Materials, Components are easily removed from the things they become
- Often, components are not bought but made.
- Since a Thing may be both a Product and a Component, what is the proper way to represent this in the database?
- A Thing is not a Component unless and until it is used in a Product.
Should this even exist, or should it be subcategory “Thing/Component/…”
has many Component
- Transactions are very generalized in this system.
- The process of making a sale is a transaction of goods for money.
- The two parties of this transaction are easy to define.
- The process of making a marble is a transaction of materials, components, time, skill, etc. for a marble.
- The first party of this transaction, the artist, is easy to define, but the second party is mysterious.
I’m not sure that I’ll have to do anything special with images - they may be handled perfectly by sorl-thumbnail.
- Photographs are a specific type of images that are a capture of the real-world.
- Photographs can have additional data that images typically don’t, like:
- location the photograph was taken
- datetime the photograph was taken
- people, places, or things captured in the photograph
- information used to scale an object in the photograph to proportion.
- a line on that photo that defines two points in the photograph
- and a measurement that gives the distance between those two points
- information about the lighting set-up, photography equipment (and its settings), etc. used in capturing the photo
Things can be in photographs
Persons can be in photographs (but really, maybe just humans and places?)
- Used to create photographs that are scaled to proportion
- used to make, for example:
- a gallery of things accurately proportioned to each other
- an image of the thing next to a quarter for scale
- used to make, for example:
Since many photographs are part of the same PhotoShoot, they have the same lighting set-up, camera set-up, etc., and instead of defining that stuff for each photo individually, it can just be defined for the shoot.
I’d like to have the ability to start a new PhotoShoot as a copy of an old one, since I usually don’t change much between each shoot. This should actually be default or at least very quick to do.
Used to define a specific type of light bulb - useful for remembering stuff about photography and videography.
Using legal definition of person - can be corporation
A special type of person that has no soul.
A special type of Person that actually is a person
I want to develop everything else before this, but I want everything else to be developed with the consideration that this will someday exist.
I don’t expect this to be terribly hard to develop, as I’ve already got a working prototype in PHP.
- Most online stores are set up more to deal with categories of things than specific things. That is to say, they are not selling the exact physical object in the photograph, but one just like it.
- My shop will usually be selling the specific thing in the photograph.
- Should there be different methods:
- for selling specific things, like this exact marble
- and for selling generic things, like one of these stickers
- Should there be different methods:
- The shop is based around Bills.
- The cart is a Bill, WishLists are Bills, and Bills are Bills
- Calculating sales tax, shipping, etc. can be hairy.
- I will used fixed price shipping - one price for U.S., one price for international.
- I will charge 8.25% sales tax for sales within Texas.
- I will give free shipping for orders over $XX.
- The ShippingCalculators and StateSalesTaxCalculators should be extensible and/or replaceable.
- Every ShippingCalculator that is valid for the Cart will be shown as an option for shipping.
- Shipping is taxable in some states, and not in others, so there should be a replaceable BillCalculator that implements the other calculators.
- The cart page should have a place to enter zip code to calculate tax and shipping
- there should be only this one step between a Client and their Total
They have monetary values, also, which may also be a measurement.
- “Manufacturer Suggested Retail Price” might be one such value
- “Best price found” might be another.
If an item sells while it is in the cart, so that the quantity in the cart are no longer available, then the cart quantity should be updated and the user should be notified when they next visit the cart page.
If the Client tries to add to Cart more of an item than are available, then no items should be added to the cart, and the user should be notified immediately by ajax.
- Not a web client - just the same thing a business would mean if they said “a client.”
- Might be accessing the web, or might be calling in an order.
- A client is anyone that receives a bill.
cart, wishlist, bill, paid, shipped, paid and shipped, abandoned
text file? image
status (could be expired)
- This is an item in the store.
- just a price and a relationship to a Thing
- Will eventually need to be able to add shipping information on these
- some items cost more than others to ship
- for now, since everything I’m selling is small, I’ll just use flat-rate shipping, so no shipping info needed
- Could be a Product or just a Thing.
- anything that implements the Thing interface?
- This is not a category to place ShopThings under, but a more generic ShopThing.
- Used to sell items that are more or less reproducible.
- Not “the exact sticker in the photograph” but “one just like it”.
- Needs to have functions for calculating shipping
- maybe they’d be in some supporting class
- maybe models should have more data than calculation?
- Special requirements, like bill.total > $40?
- Not sure how to handle payments.
- Would like to have payment processors interchangeable and be able to use muliple
- Could be Square, PayPal, cash, check, Stripe, etc.