Landlord-Tenant Dispute Resolution Tool
Describe the Dispute
General Information & Rights (USA Focus)
Generated Communication Template
Dispute Summary
A landlord cannot evict a tenant without a court order. The process must begin with a formal written notice (e.g., Notice to Quit). Tenants have the right to contest the eviction in court. "Self-help" evictions, such as changing the locks or shutting off utilities, are illegal in all states.
Landlord's Rights:
Landlords can initiate an eviction for lease violations, such as non-payment of rent or causing significant property damage. They must follow a strict legal process, which includes providing proper notice and obtaining a court judgment before the tenant can be legally removed from the property by law enforcement.
` }, communicationTemplates: { repairs_tenant: `[Date]\n\n[Landlord Name]\n[Landlord Address]\n\nRe: Formal Request for Repairs at [Your Address]\n\nDear [Landlord Name],\n\nThis letter serves as a formal written request for repairs at the above-mentioned property. The following issues require your immediate attention:\n\n[DISPUTE_DESCRIPTION]\n\nAs per my right to a habitable living environment, I request that these repairs be completed within a reasonable timeframe (e.g., 14 days).\n\nMy desired resolution is: [DESIRED_RESOLUTION].\n\nPlease contact me at your earliest convenience to schedule these repairs.\n\nSincerely,\n[Your Name]`, rent_landlord: `[Date]\n\n[Tenant Name]\n[Tenant Address]\n\nRe: Notice to Pay Rent or Quit\n\nDear [Tenant Name],\n\nThis notice is to inform you that your rent payment is overdue. As of [Date], you have an outstanding balance of $[Amount].\n\n[DISPUTE_DESCRIPTION]\n\nThis letter serves as a formal demand for payment. You are required to pay the full overdue amount within [Number] days, as per state law, or vacate the premises. Failure to comply will result in the initiation of formal eviction proceedings.\n\nMy desired resolution is: [DESIRED_RESOLUTION].\n\nPlease contact me immediately to resolve this matter.\n\nSincerely,\n[Your Name]`, // Add other templates... }, // --- INITIALIZATION --- init() { this.dom = this.cacheDom(); this.bindEvents(); this.updateNavButtons(); }, cacheDom() { return { tabButtons: document.querySelectorAll('.tab-btn'), tabContents: document.querySelectorAll('.tab-content'), prevBtn: document.getElementById('prev-btn'), nextBtn: document.getElementById('next-btn'), pdfBtn: document.getElementById('download-pdf-btn'), disputeForm: document.getElementById('dispute-form'), infoRightsContent: document.getElementById('info-rights-content'), communicationTemplate: document.getElementById('communication-template'), summaryContent: document.getElementById('summary-content'), }; }, bindEvents() { this.dom.pdfBtn.addEventListener('click', this.generatePdf.bind(this)); }, // --- DATA & CONTENT HANDLING --- updateDisputeDetails() { this.disputeDetails = { role: document.getElementById('user-role').value, category: document.getElementById('issue-category').value, description: document.getElementById('dispute-description').value, resolution: document.getElementById('desired-resolution').value, }; }, renderInfoContent() { const category = this.disputeDetails.category; this.dom.infoRightsContent.innerHTML = this.infoContent[category] || `Please select an issue category to see relevant information.
`; }, renderCommunicationTemplate() { const role = this.disputeDetails.role.toLowerCase(); const category = this.disputeDetails.category; const templateKey = `${category}_${role}`; let template = this.communicationTemplates[templateKey] || `[Date]\n\n[Recipient Name]\n[Recipient Address]\n\nRe: Issue Regarding Your Tenancy/Property at [Address]\n\nDear [Recipient Name],\n\nThis letter is to formally address the following issue:\n\n[DISPUTE_DESCRIPTION]\n\nTo resolve this matter, I propose the following:\n\n[DESIRED_RESOLUTION]\n\nPlease respond within [Number] days to discuss a solution.\n\nSincerely,\n[Your Name]`; template = template.replace(/\[DISPUTE_DESCRIPTION\]/g, this.disputeDetails.description || '[Describe the issue here]'); template = template.replace(/\[DESIRED_RESOLUTION\]/g, this.disputeDetails.resolution || '[State your desired outcome]'); this.dom.communicationTemplate.value = template; }, renderSummary() { const details = this.disputeDetails; this.dom.summaryContent.innerHTML = `Dispute Summary
Your Role:
${details.role}
Issue Category:
${details.category.charAt(0).toUpperCase() + details.category.slice(1)}
Issue Description:
${details.description.replace(/\n/g, '
')}
Desired Resolution:
${details.resolution}
Generated Communication
${this.dom.communicationTemplate.value}
