Skip to content
/ tlom2 Public

The Landlord's Operating Manual, codified with React.

License

Notifications You must be signed in to change notification settings

rr34/tlom2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

248 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

To-Do

todonext before relaunching to existing then launching to Gary

  • First impression page???

  • trim trim trim make pretty per Z.

  • Photos need to rotate

  • Consolidate Front Door and Access Control items?

  • Enable log notes and files to tasks, not just clock entries?

  • Ticker for owner with loggername to see all activity at properties.

  • By-item view especially should have copiable info messages

  • Links should default to an item so contractors start at the item they are supposed to work on and remain in that item unless they click out.

  • Gary house to frontdoors.

  • User change password

  • improve the overall structure / clean-up?

    • Consider consolidating frontend DB actions to separate file before restructuring pages per chatgpt suggestion? Partially done already.
    • DB interaction standardization
  • Add Delaware County addresses

  • enable receive payment from owners.

  • Pre populate front door on creation based on size and standard questions? Sump pump? Gas? Propane? Humidifier?

Access Control Map

  • Owners manage access to properties. Owners can:
    • See list of all front doors under their ownership. SelectFrontDoor component?
    • Set passcode for front doors under their ownership by creating links in accesslinks table.
      • So, URL like http://127.0.0.1:5173/frontdoors/${lnkid} should prompt for a passcode to grant access
      • If PromptForName, allow entrant to enter a name or select from past guests after the passcode is entered, like a 'guest book'. Name would get logged with all notes logged in str5_log.
    • Generate unique links for one-to-many properties with a single passcode (like a very customizable master key). Such a link grants access with only authentication and no identification, but link should be associated with a creation date, owner-definable text description like, "HVAC guy's link", owner-definable expiration period anywhere from an hour to days to a year to forever, and also a "prompt for name?" so the link can optionally prompt each entrant to self-identify.
    • Search for properties to add to their ownership.
    • Initially, "ownership relationship to property" will be determined manually by calling me the developer then later some other way.
  • The people table needs to have an email field and maybe another field identifying if it's just a "name in the guestbook" or an actual unique individual id expected to be the owner of some properties.

Interaction Pages

  • User Level Interactions
    • Documentation: single item view to make text notes, view and upload photos, PDFs, files
    • Inspection: list of all items with status and ability to mark complete or add to-do tasks.
    • To-Do List: todo list for the property.
    • All Notes: read-only text of all notes and files associated with the property.
    • Manage Items: Add or edit items to the property.
  • Advanced Interactions / project management (within front door, then per invoice, also some completely outside front door like materials)
    • Job Estimate
    • Job Materials
    • Job Log
    • Edit Checklists, materials lists (need to be able to make and view notes about each step or job to review every time you start a step.)
    • All materials list
    • Scheduling view for planning work dates
    • Dev views?
    • worker views?

Define step for job checklists:

  • If no natural stopping point, should be one step

  • Steps can be kinda long

  • Steps should divide jobs as much as possible to facilitate estimating without getting in the way of doing

  • if part of step could be often excluded by itself, should be separate step, like run wire to outlet is either necessary or not

  • merge more steps and jobs

  • remove old tiles is in tile 3 and in tile 1

  • recategorize many to labor in order to hire somebody for a day.

  • With anything job, really need to be able to enter a task description for task instances.

  • Should be able to see the list of applied jobs on the front door items view.

  • 3 liters is the most mortar I can lay before it dries.

  • Seems like I can put down about 1 to 1.5 liters of grout before it dries.

  • chronological log works, but should identify gaps and overlaps.

  • Should be able to clock in on chronological log, but would also need to show Front Door, so maybe not.

  • Need to be able to store a note like the notes at the top of tilecalc. Those are critical.

  • backer board = 13mm. tile + mortar = 11mm

  • Implement tags where appropriate, like item type tags to show only jobs that are applicable to the item. Each job could be applicable to multiple items.

  • reduce the chronological log to previous x days, 2 weeks, something manageable.

  • be able to clock in on chronological log.

  • reduce clocked in and clocked out to a single time when they match, maybe a single start time.

  • change the long varchar fields to text.

todo longer-term

  • Person time logged view, honestly just for me logging my time with it.
  • changes saved confirmations, maybe less actually now.
  • estimate view needs to show average hours per job.
  • tlom-renovation online with jobs list with prices
  • Estimate view needs to list materials and give the option to charge material to customer.
  • Make an add task button at top of each job under estimate view?
  • Best way to include all US properties and maintain property integrity over time and change of ownership.
  • record tile job sizes
  • make the work view by phase - or maybe just allow sorting by phase
  • Make invoice number useful.

notes from using the app

  • Tile row 0 so even/odd holds for negative rows
  • Label the ID numbers that are placed on rows
  • hours by day
  • client view that just shows tasks status and progress bar.

todo more

  • needs to be an estimate view under TasksLog

  • MomentIn should default to NULL, not timenow

  • Somehow show only one of MomentIn / MomentOut to the user as the moment the task was switched. Need to connect moment end of one event to moment beginning of next

  • Also need to identify overlap in times logged

  • todo order by phase (and implement phase since it's not currently implemented.)

  • todo group by date range

  • todo group by chargeable or not

  • todo group by status

  • todo group by trade?

  • implement DST? Done already I think? What is the convention?

  • need to be able to add up estimated time for jobs cost estimate - should be included in the TasksLog

  • need a scheduled category for hours to show hours scheduled

  • shopping list needs to work

React + TypeScript + Vite

This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.

Currently, two official plugins are available:

Expanding the ESLint configuration

If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:

export default tseslint.config({
  extends: [
    // Remove ...tseslint.configs.recommended and replace with this
    ...tseslint.configs.recommendedTypeChecked,
    // Alternatively, use this for stricter rules
    ...tseslint.configs.strictTypeChecked,
    // Optionally, add this for stylistic rules
    ...tseslint.configs.stylisticTypeChecked,
  ],
  languageOptions: {
    // other options...
    parserOptions: {
      project: ['./tsconfig.node.json', './tsconfig.app.json'],
      tsconfigRootDir: import.meta.dirname,
    },
  },
})

You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:

// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'

export default tseslint.config({
  plugins: {
    // Add the react-x and react-dom plugins
    'react-x': reactX,
    'react-dom': reactDom,
  },
  rules: {
    // other rules...
    // Enable its recommended typescript rules
    ...reactX.configs['recommended-typescript'].rules,
    ...reactDom.configs.recommended.rules,
  },
})

Database Schema in Repository

  • Schema snapshot: db/schema.sql — commit a CREATE TABLE export here so contributors and automation can quickly see fields, keys, and enum-like columns.
  • Recommended generation command:
mysqldump -u <user> -p --no-data tlom > schema.sql

OCR for Model Tag Photos, Installation

Server-side OCR runs via PaddleOCR in a Python virtualenv. This is intentionally isolated from the rest of the app so OCR dependencies don't affect anything else.

Why the extra constraints file?

  • PaddleOCR's dependency metadata is currently too loose and allows NumPy 2.x.
  • PaddleOCR/OpenCV wheels are compiled against NumPy 1.x and break with NumPy 2.x (ABI mismatch).
  • Using a constraints file pins NumPy/OpenCV to compatible versions while still allowing a one-command install.

Setup (from repo root):

cd api
python3 -m venv .python_venv
source .python_venv/bin/activate
pip install -r requirements-ocr.txt -c constraints-ocr.txt

Env vars (in api/.env):

OCR_PYTHON_PATH=/home/nate/code/tlom2/api/.python_venv/bin/python

Verify OCR works:

/home/nate/code/tlom2/api/.python_venv/bin/python /home/nate/code/tlom2/api/ocr/paddle_ocr.py /home/nate/code/tlom2/api/uploads/ocrtestimage.jpg

If OCR fails with a NumPy ABI error, it usually means NumPy 2.x was installed. Re-run the install command above so constraints are applied.

About

The Landlord's Operating Manual, codified with React.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published