Help
RSS
API
Feed
Maltego
Contact
Domain > creative.chadchoquette.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2026-01-29
162.0.229.118
(
ClassC
)
Port 80
HTTP/1.1 301 Moved Permanentlykeep-alive: timeout5, max100content-type: text/htmlcontent-length: 795date: Thu, 29 Jan 2026 14:22:52 GMTserver: LiteSpeedlocation: https://creative.chadchoquette.com/x-turbo-charged-by: LiteSpeed !DOCTYPE html>html styleheight:100%>head>meta nameviewport contentwidthdevice-width, initial-scale1, shrink-to-fitno />title> 301 Moved Permanently/title>style>@media (prefers-color-scheme:dark){body{background-color:#000!important}}/style>/head>body stylecolor: #444; margin:0;font: normal 14px/20px Arial, Helvetica, sans-serif; height:100%; background-color: #fff;>div styleheight:auto; min-height:100%; > div styletext-align: center; width:800px; margin-left: -400px; position:absolute; top: 30%; left:50%;> h1 stylemargin:0; font-size:150px; line-height:150px; font-weight:bold;>301/h1>h2 stylemargin-top:20px;font-size: 30px;>Moved Permanently/h2>p>The document has been permanently moved./p>/div>/div>/body>/html>
Port 443
HTTP/1.1 200 OKkeep-alive: timeout5, max100content-type: text/htmllast-modified: Wed, 02 Jul 2025 13:28:49 GMTaccept-ranges: bytescontent-length: 63312date: Thu, 29 Jan 2026 14:22:53 GMTserver: LiteSpeedx-turbo-charged-by: LiteSpeed !DOCTYPE html>html langen>head> !-- Google tag (gtag.js) -->script async srchttps://www.googletagmanager.com/gtag/js?idG-T9QVW1BZ4L>/script>script> window.dataLayer window.dataLayer || ; function gtag(){dataLayer.push(arguments);} gtag(js, new Date()); gtag(config, G-T9QVW1BZ4L);/script> meta charsetUTF-8> meta nameviewport contentwidthdevice-width, initial-scale1.0> title>Send2Chad/title> link relstylesheet hrefhttps://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css> style> :root { --primary-color: #4361ee; --secondary-color: #3f37c9; --accent-color: #4895ef; --success-color: #4cc9f0; --warning-color: #f72585; --light-color: #f8f9fa; --dark-color: #212529; --gray-color: #6c757d; --border-radius: 8px; --box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1); --transition: all 0.3s ease; } * { box-sizing: border-box; margin: 0; padding: 0; } body { font-family: Segoe UI, Tahoma, Geneva, Verdana, sans-serif; line-height: 1.6; color: var(--dark-color); background-color: #f4f7f9; padding: 0; margin: 0; } .container { max-width: 1200px; margin: 0 auto; padding: 20px; } header { background-color: var(--primary-color); color: white; padding: 1rem 0; text-align: center; margin-bottom: 2rem; box-shadow: var(--box-shadow); } h1, h2, h3, h4 { margin-bottom: 1rem; line-height: 1.2; } .card { background-color: white; border-radius: var(--border-radius); box-shadow: var(--box-shadow); padding: 1.5rem; margin-bottom: 1.5rem; transition: var(--transition); } .card:hover { box-shadow: 0 10px 15px rgba(0, 0, 0, 0.1); } .form-group { margin-bottom: 1rem; } .flex {display:flex;} .form-col { width:50%; } .form-col:first-child { padding-right:5px; } .form-col:first-child { padding-left:5px; } label { display: block; margin-bottom: 0.5rem; font-weight: 600; } input, select { width: 100%; padding: 0.75rem; border: 1px solid #ddd; border-radius: var(--border-radius); font-size: 1rem; transition: var(--transition); } input:focus, select:focus { outline: none; border-color: var(--accent-color); box-shadow: 0 0 0 3px rgba(67, 97, 238, 0.1); } .toggle-container { display: flex; align-items: center; margin-bottom: 1rem; } .toggle-label { margin-right: 1rem; font-weight: 600; } .toggle-switch { position: relative; display: inline-block; width: 60px; height: 34px; } .toggle-switch input { opacity: 0; width: 0; height: 0; } .slider { position: absolute; cursor: pointer; top: 0; left: 0; right: 0; bottom: 0; background-color: #ccc; transition: .4s; border-radius: 34px; } .slider:before { position: absolute; content: ; height: 26px; width: 26px; left: 4px; bottom: 4px; background-color: white; transition: .4s; border-radius: 50%; } input:checked + .slider { background-color: var(--primary-color); } input:focus + .slider { box-shadow: 0 0 1px var(--primary-color); } input:checked + .slider:before { transform: translateX(26px); } .toggle-text { margin-left: 1rem; font-weight: 500; } button { background-color: var(--primary-color); color: white; border: none; padding: 0.75rem 1.5rem; border-radius: var(--border-radius); cursor: pointer; font-size: 1rem; font-weight: 600; transition: var(--transition); } button:hover { background-color: var(--secondary-color); } button.secondary { background-color: var(--gray-color); } button.secondary:hover { background-color: #5a6268; } .btn-group { display: flex; gap: 1rem; margin-top: 1rem; } .results { display: none; } .results.active { display: block; } .result-section { margin-bottom: 1.5rem; } .result-section h3 { border-bottom: 2px solid var(--accent-color); padding-bottom: 0.5rem; margin-bottom: 1rem; } .result-row { display: flex; justify-content: space-between; margin-bottom: 0.5rem; padding-bottom: 0.5rem; border-bottom: 1px solid #eee; } .result-label { font-weight: 500; } .result-value { font-weight: 600; } .positive { color: #28a745; } .negative { color: #dc3545; } .saved-properties { margin-top: 2rem; } .property-card { background-color: white; border-radius: var(--border-radius); box-shadow: var(--box-shadow); padding: 1rem; margin-bottom: 1rem; cursor: pointer; transition: var(--transition); } .property-card:hover { box-shadow: 0 6px 12px rgba(0, 0, 0, 0.1); } .property-header { display: flex; justify-content: space-between; align-items: center; margin-bottom: 0.5rem; } .property-address { font-weight: 600; font-size: 1.1rem; } .property-type { background-color: var(--accent-color); color: white; padding: 0.25rem 0.5rem; border-radius: 4px; font-size: 0.8rem; font-weight: 600; } .property-summary { display: flex; justify-content: space-between; margin-bottom: 0.5rem; } .property-price, .property-income, .property-net { text-align: center; flex: 1; } .property-label { font-size: 0.8rem; color: var(--gray-color); } .property-value { font-weight: 600; font-size: 1.1rem; } .property-details { display: none; margin-top: 1rem; padding-top: 1rem; border-top: 1px solid #eee; } .property-details.active { display: block; } .property-actions { display: flex; justify-content: flex-end; gap: 0.5rem; margin-top: 0.5rem; } .btn-sm { padding: 0.25rem 0.5rem; font-size: 0.8rem; } .btn-delete { background-color: var(--warning-color); } .btn-success { background-color: #28a745; } .btn-success:hover { background-color: #218838; } @media (max-width: 768px) { .container { padding: 10px; } .card { padding: 1rem; } .property-summary { flex-direction: column; gap: 0.5rem; } .property-price, .property-income, .property-net { text-align: left; } .btn-group { flex-direction: column; } } /style>/head>body> header> div classcontainer> div styledisplay: flex; justify-content: space-between; align-items: center;> h1 styletext-align: left;>Send2Chad : Creative Dealsbr>a hrefhttps://youtu.be/r7jYnSLvTy8 stylecolor:white;text-decoration:none;font-size: 12px;>How to Video/a>/h1> div idsettingsIconContainer> i idsettingsIcon classfas fa-cog stylefont-size: 1.5rem; cursor: pointer;>/i> div iduserSavedMessage styledisplay: none; font-size: 0.8rem; margin-top: 5px; text-align: center;>User saved/div> /div> /div> /div> /header> div iduserSettingsSection classcontainer styledisplay: none; margin-top: -1.5rem; margin-bottom: 1rem;> div classcard> h2>User Settings/h2> form iduserSettingsForm> div classform-group> label forfirstName>First Name/label> input typetext idfirstName placeholderEnter your first name required> /div> div classform-group> label forlastName>Last Name/label> input typetext idlastName placeholderEnter your last name required> /div> div classform-group> label forphone>Phone/label> input typetel idphone placeholderEnter your phone number required> /div> div classform-group> label foremail>Email/label> input typeemail idemail placeholderEnter your email address required> /div> div classform-group> label foruserAddress>Address/label> input typetext iduserAddress placeholderEnter your address required> /div> div classbtn-group> button typebutton idsaveUserBtn>Save User Information/button> /div> /form> /div> /div> div classcontainer> div classcard> h2>Property Details/h2> form idpropertyForm> div classform-group flex> div classform-col> label foraddress>Address/label> input typetext idaddress placeholderStreet address required> /div> div classform-col> label forcity>City/label> input typetext idcity placeholderCity required> /div> /div> div classform-group flex> div classform-col> label forstate>State/label>select idstate namestate required>option value>Select a state/option>option valueAL>Alabama/option>option valueAK>Alaska/option>option valueAZ>Arizona/option>option valueAR>Arkansas/option>option valueCA>California/option>option valueCO>Colorado/option>option valueCT>Connecticut/option>option valueDE>Delaware/option>option valueFL>Florida/option>option valueGA>Georgia/option>option valueHI>Hawaii/option>option valueID>Idaho/option>option valueIL>Illinois/option>option valueIN>Indiana/option>option valueIA>Iowa/option>option valueKS>Kansas/option>option valueKY>Kentucky/option>option valueLA>Louisiana/option>option valueME>Maine/option>option valueMD>Maryland/option>option valueMA>Massachusetts/option>option valueMI>Michigan/option>option valueMN>Minnesota/option>option valueMS>Mississippi/option>option valueMO>Missouri/option>option valueMT>Montana/option>option valueNE>Nebraska/option>option valueNV>Nevada/option>option valueNH>New Hampshire/option>option valueNJ>New Jersey/option>option valueNM>New Mexico/option>option valueNY>New York/option>option valueNC>North Carolina/option>option valueND>North Dakota/option>option valueOH>Ohio/option>option valueOK>Oklahoma/option>option valueOR>Oregon/option>option valuePA>Pennsylvania/option>option valueRI>Rhode Island/option>option valueSC>South Carolina/option>option valueSD>South Dakota/option>option valueTN>Tennessee/option>option valueTX>Texas/option>option valueUT>Utah/option>option valueVT>Vermont/option>option valueVA>Virginia/option>option valueWA>Washington/option>option valueWV>West Virginia/option>option valueWI>Wisconsin/option>option valueWY>Wyoming/option>/select> /div> div classform-col> label forpostal_code>Postal Code/label> input typenumber idpostal_code placeholder12345 required> /div> /div> div classform-group> label forpurchasePrice>Purchase Price/label> input typenumber idpurchasePrice placeholderEnter purchase price min1 required> /div> div classform-group> label forincome>Income sup>(LTR Monthly / STR Annual Gross)/sup>/label> input typenumber idincome placeholderEnter rental income min1 required> /div> div classform-group flex> div classform-col> label forltv>Loan to Value (LTV)/label> select idltv required> option value0.50>50%/option> option value0.55>55%/option> option value0.60>60%/option> option value0.65>65%/option> option value0.70>70%/option> option value0.75>75%/option> option value0.80>80%/option> /select> /div> di classform-colv> label forltp>Seller Carry Back (LTP)/label> select idltp required> option value0.50>50%/option> option value0.55>55%/option> option value0.40>40%/option> option value0.35>35%/option> option value0.30>30%/option> option value0.25 selected>25%/option> option value0.20>20%/option> option value0.15>15%/option> option value0.10>10%/option> /select> /div> /div> div classtoggle-container> span classtoggle-label>Property Type:/span> label classtoggle-switch> input typecheckbox idpropertyType> span classslider>/span> /label> span classtoggle-text idpropertyTypeText>Short Term Rental? (STR)/span> /div> div classbtn-group> button typesubmit idcalculateBtn>Calculate/button> button typebutton idresetBtn classsecondary>Reset/button> /div> /form> /div> div classcard results idresultsCard> h2>Calculation Results/h2> div classresult-section> h3>Property Details/h3> div classresult-row> span classresult-label>Address:/span> span classresult-value idresult-address>/span> /div> div classresult-row> span classresult-label>Property Type:/span> span classresult-value idresult-type>/span> /div> /div> div classresult-section> h3>The Deal/h3> div classresult-row> span classresult-label>Does this work? (1-2 is likely, greater than 2, yes!)/span> span classresult-value idresult-doesThisWork>/span> /div> div classresult-row> span classresult-label>Seller Financing Amount:/span> span classresult-value idresult-sf-amount>/span> /div> div classresult-row> span classresult-label>To Bird Dog (You):/span> span classresult-value idresult-birdDog>/span> /div> div classresult-row> span classresult-label>Margin:/span> span classresult-value idresult-netCashFlow>/span> /div> /div> div classresult-section> h3>Purchase Structure/h3> div classresult-row> span classresult-label>Purchase Price:/span> span classresult-value idresult-purchase-price>/span> /div> div classresult-row> span classresult-label>Mortgage Amount (LTV: span idresult-ltv>/span>):/span> span classresult-value idresult-mortgage>/span> /div> !--div classresult-row> span classresult-label>Seller Financing Amount:/span> span classresult-value idresult-sf-amount>/span> /div>--> div classresult-row> span classresult-label>To Seller at Closing:/span> span classresult-value idresult-to-seller>/span> /div> div classresult-row> span classresult-label>To Buyer at Closing:/span> span classresult-value idresult-to-buyer>/span> /div> /div> div classresult-section> h3>Monthly Cash Flow/h3> div classresult-row> span classresult-label>Monthly Income:/span> span classresult-value idresult-monthly-income>/span> /div> div classresult-row> span classresult-label>Principal & Interest:/span> span classresult-value idresult-pi>/span> /div> div classresult-row> span classresult-label>Property Taxes:/span> span classresult-value idresult-taxes>/span> /div> div classresult-row> span classresult-label>Insurance:/span> span classresult-value idresult-insurance>/span> /div> div classresult-row> span classresult-label>Seller Financing Payment:/span> span classresult-value idresult-sf-payment>/span> /div> div classresult-row> span classresult-label>Property Management:/span> span classresult-value idresult-management>/span> /div> div classresult-row> span classresult-label>Vacancy:/span> span classresult-value idresult-vacancy>/span> /div> div classresult-row> span classresult-label>Maintenance:/span> span classresult-value idresult-maintenance>/span> /div> div classresult-row> span classresult-label>Net Monthly Cash Flow:/span> span classresult-value idresult-net-cash-flow>/span> /div> /div> div classresult-section> h3>The Offer span idcopyButton>i classfa-solid fa-copy stylemargin-right:5px;>/i>span idcheckIcon styledisplay:none;>Copied! i classfa-solid fa-check>/i>/span>/h3> span idtoCopy>div classresult-row>span classresult-label>Address:/span>span classresult-value idoffer-address>/span>/div>div classresult-row>span classresult-label>Purchase Price:/span>span classresult-value idoffer-purchase-price>/span>/div>div classresult-row>span classresult-label>To Seller At Closing:/span>span classresult-value idoffer-to-seller>/span>/div>div classresult-row>span classresult-label>Monthly Payment to Seller:/span>span classresult-value idoffer-sf-payment>/span>/div>/span> /div> div classbtn-group> button typebutton idsavePropertyBtn>Save Property/button> /div> /div> div classsaved-properties idsavedPropertiesSection> h2>Saved Properties/h2> div idsavedPropertiesList> !-- Saved properties will be displayed here --> p idnoSavedProperties>No saved properties yet./p> /div> div classbtn-group> button typebutton idaddNewPropertyBtn>Add New Property/button> /div> /div> /div> script> // DOM Elements const propertyForm document.getElementById(propertyForm); const propertyTypeCheckbox document.getElementById(propertyType); const propertyTypeText document.getElementById(propertyTypeText); const calculateBtn document.getElementById(calculateBtn); const resetBtn document.getElementById(resetBtn); const resultsCard document.getElementById(resultsCard); const savePropertyBtn document.getElementById(savePropertyBtn); const savedPropertiesSection document.getElementById(savedPropertiesSection); const savedPropertiesList document.getElementById(savedPropertiesList); const noSavedProperties document.getElementById(noSavedProperties); const addNewPropertyBtn document.getElementById(addNewPropertyBtn); // Constants for calculations const INTEREST_RATE 7.5; // 7.5% interest rate const LOAN_TERM_YEARS 30; const MONTHLY_PAYMENTS LOAN_TERM_YEARS * 12; const TAX_RATE 0.20; // 15% tax rate const DEPRECIATION_YEARS 27.5; // Standard residential depreciation period const STORAGE_KEY savedProperties; // Key for localStorage // Current property being calculated let currentProperty null; // User settings storage key const USER_SETTINGS_KEY userSettings; // Initialize the application function init() { // Update property type text based on checkbox propertyTypeCheckbox.addEventListener(change, updatePropertyTypeText); // Form submission propertyForm.addEventListener(submit, handleFormSubmit); // Reset button resetBtn.addEventListener(click, resetForm); // Save property button savePropertyBtn.addEventListener(click, saveProperty); // Add new property button addNewPropertyBtn.addEventListener(click, addNewProperty); // Settings icon click document.getElementById(settingsIcon).addEventListener(click, toggleUserSettings); // Save user settings button document.getElementById(saveUserBtn).addEventListener(click, saveUserSettings); // Load saved properties from localStorage loadSavedProperties(); // Load user settings if available loadUserSettings(); // Initial property type text update updatePropertyTypeText(); // Check if Send to Chad buttons should be enabled updateSendToChadButtons(); } document.getElementById(copyButton).onclick function () { const textToCopy document.getElementById(toCopy).textContent; // Use the Clipboard API to write text to clipboard navigator.clipboard.writeText(textToCopy) .then(() > { const checkIcon document.getElementById(checkIcon); checkIcon.style.display inline; // Hide it again after 1.5 seconds setTimeout(() > { checkIcon.style.display none; }, 1500); }) .catch(err > { console.error(Failed to copy text: , err); }); }; // Toggle user settings section visibility function toggleUserSettings() { const settingsSection document.getElementById(userSettingsSection); settingsSection.style.display settingsSection.style.display none ? block : none; } // Save user settings to localStorage function saveUserSettings() { const firstName document.getElementById(firstName).value.trim(); const lastName document.getElementById(lastName).value.trim(); const phone +1 + document.getElementById(phone).value.trim(); const email document.getElementById(email).value.trim(); const userAddress document.getElementById(userAddress).value.trim(); // Validate all fields are filled if (!firstName || !lastName || !phone || !email || !userAddress) { alert(Please fill in all user information fields.); return; } // Create user settings object const userSettings { firstName, lastName, phone, email, userAddress }; // Save to localStorage localStorage.setItem(USER_SETTINGS_KEY, JSON.stringify(userSettings)); // Hide settings section document.getElementById(userSettingsSection).style.display none; // Show saved message const savedMessage document.getElementById(userSavedMessage); savedMessage.style.display block; // Hide saved message after 3 seconds setTimeout(() > { savedMessage.style.display none; }, 3000); // Enable Send to Chad buttons updateSendToChadButtons(); } // Load user settings from localStorage function loadUserSettings() { const userSettingsData localStorage.getItem(USER_SETTINGS_KEY); if (userSettingsData) { const userSettings JSON.parse(userSettingsData); // Fill form fields document.getElementById(firstName).value userSettings.firstName || ; document.getElementById(lastName).value userSettings.lastName || ; document.getElementById(phone).value userSettings.phone || ; document.getElementById(email).value userSettings.email || ; document.getElementById(userAddress).value userSettings.userAddress || ; } } // Check if user settings exist and update Send to Chad buttons accordingly function updateSendToChadButtons() { const userSettingsData localStorage.getItem(USER_SETTINGS_KEY); const hasUserSettings !!userSettingsData; const savedProperties getSavedProperties(); // Get all Send to Chad buttons const sendButtons document.querySelectorAll(.property-card button:nth-child(2)); // Update each button sendButtons.forEach(button > { const propertyIndex button.closest(.property-card).dataset.index; const property savedPropertiespropertyIndex; // Check if property has been sent if (property && property.sentToChad) { button.textContent Property Sent; button.disabled true; button.classList.add(btn-success); button.title This property has already been sent; return; } // Default state - gray and disabled if no user settings button.disabled !hasUserSettings; button.style.backgroundColor !hasUserSettings ? #6c757d : ; if (!hasUserSettings) { button.title Please save your user information first; addToggleUserSettingsClickEvent(button); } else { button.title ; removeToggleUserSettingsClickEvent(button); } }); } function addToggleUserSettingsClickEvent(element) { if (element) { element.onclick function () { toggleUserSettings(); }; }}function removeToggleUserSettingsClickEvent(element) { if (element) { element.onclick null; }} // Update property type text based on checkbox function updatePropertyTypeText() { if (propertyTypeCheckbox.checked) { propertyTypeText.textContent Short Term Rental (STR); } else { propertyTypeText.textContent Long Term Rental (LTR); } } // Handle form submission function handleFormSubmit(e) { e.preventDefault(); // Get form values const address document.getElementById(address).value; const city document.getElementById(city).value; const state document.getElementById(state).value; const postal_code document.getElementById(postal_code).value; const country US; const purchasePrice parseFloat(document.getElementById(purchasePrice).value); const ltv parseFloat(document.getElementById(ltv).value); const ltp parseFloat(document.getElementById(ltp).value); const isSTR propertyTypeCheckbox.checked; const inputtedIncome document.getElementById(income).value; var adjustedIncome 0; if (propertyTypeCheckbox.checked) { adjustedIncome (inputtedIncome*.7)/12; } else { adjustedIncome parseFloat(inputtedIncome); } // Calculate results const results calculateResults(address, state, purchasePrice, adjustedIncome, ltv, ltp, isSTR); // Store current property currentProperty { address, city, state, postal_code, country, purchasePrice, adjustedIncome, ltv, isSTR, results }; // Display results displayResults(currentProperty); // Show results card resultsCard.classList.add(active); } // Calculate all results based on inputs function calculateResults(address, state, purchasePrice, income, ltv, ltp, isSTR) { // Calculate mortgage amount const mortgageAmount purchasePrice * ltv; // Calculate fromClosing based on purchase price let fromClosing purchasePrice * ltp; // if (purchasePrice 100000) { // fromClosing 30000; // } else if (purchasePrice 150000) { // fromClosing 35000; // } else if (purchasePrice 200000) { // fromClosing 40000; // } else if (purchasePrice 1000000) { // fromClosing 40000 + Math.ceil((purchasePrice - 200000) / 50000) * 10000; // } else if (purchasePrice 2000000) { // fromClosing 145000 + Math.ceil((purchasePrice - 1000000) / 50000) * 20000; // } else { // fromClosing purchasePrice * 0.3; // } // Calculate amount to buyer at closing const toBuyer fromClosing; // Calculate seller financing amount const sfAmount purchasePrice - mortgageAmount + toBuyer; // Calculate amount to seller at closing const toSeller mortgageAmount - toBuyer; // Calculate monthly mortgage payment (P&I) const monthlyInterestRate INTEREST_RATE / 100 / 12; const pi (mortgageAmount * (monthlyInterestRate * Math.pow(1 + monthlyInterestRate, MONTHLY_PAYMENTS))) / (Math.pow(1 + monthlyInterestRate, MONTHLY_PAYMENTS) - 1); // Calculate property taxes var temptax 0; if (state SC) { temptax purchasePrice * 0.00137; } else { temptax purchasePrice * 0.0005; } const taxes temptax; // Calculate insurance const insurance purchasePrice * 0.0002; // Calculate seller financing payment const sfPayment (sfAmount * 0.006) / 12; // Calculate property management const management income * 0.1; // Calculate vacancy const vacancy income * 0.05; // Calculate maintenance const maintenance income * 0.1; // Calculate net monthly cash flow const totalExpenses pi + taxes + insurance + sfPayment + management + vacancy + maintenance; const netCashFlow income - totalExpenses; // Calculate annual figures const annualIncome income * 12; const annualExpenses totalExpenses * 12; // Calculate rental profit (annual) const rentalProfit annualIncome - annualExpenses; // Calculate depreciation (annual) const depreciation purchasePrice / DEPRECIATION_YEARS; // Calculate new fields as requested const closingCosts purchasePrice * 0.01; const transactionalFee sfAmount * 0.025; const tcFee 5000; const originationFee mortgageAmount * 0.03; const birdDog (fromClosing - closingCosts - transactionalFee - tcFee - originationFee) / 15; const toChad fromClosing - closingCosts - transactionalFee - tcFee - originationFee - birdDog; const lendProfit (toChad * 1.2 * 1.2) - toChad; const profit lendProfit + rentalProfit; // Update taxable income calculation const taxableIncome profit - depreciation; // Calculate taxes (annual) const incomeTaxes taxableIncome > 0 ? taxableIncome * TAX_RATE : 0; // Update NET NET calculation const netNet profit - incomeTaxes; const ratio income / (pi+taxes+insurance); const doesThisWork (ratio + ((toChad/10000)*.25)).toFixed(2); return { mortgageAmount, sfAmount, toSeller, toBuyer, ltv, monthlyIncome: income, monthlyExpenses: { pi, taxes, insurance, sfPayment, management, vacancy, maintenance }, ratio, doesThisWork, netCashFlow, rentalProfit, depreciation, taxableIncome, incomeTaxes, netNet, fromClosing, closingCosts, transactionalFee, tcFee, originationFee, birdDog, toChad, lendProfit, profit }; } // Display results in the results card function displayResults(property) { // Helper function to safely set text content function safeSetTextContent(id, value) { const element document.getElementById(id); if (element) { element.textContent value; } } // Helper function to safely set class and text content function safeSetClassAndText(id, text, className) { const element document.getElementById(id); if (element) { element.textContent text; if (className) { element.className className; } } } // Property Details safeSetTextContent(result-address, property.address); safeSetTextContent(result-city, property.city); safeSetTextContent(result-state, property.state); safeSetTextContent(result-postal_code, property.postal_code); safeSetTextContent(result-country, property.country); safeSetTextContent(offer-address, property.address); safeSetTextContent(result-type, property.isSTR ? Short Term Rental (STR) : Long Term Rental (LTR)); safeSetTextContent(result-doesThisWork, property.results.doesThisWork) safeSetTextContent(result-birdDog, formatCurrency(property.results.birdDog)) safeSetTextContent(result-netCashFlow, formatCurrency(property.results.netCashFlow * .7)) // Purchase Structure safeSetTextContent(result-purchase-price, formatCurrency(property.purchasePrice)); safeSetTextContent(offer-purchase-price, formatCurrency(property.purchasePrice)); safeSetTextContent(result-ltv, (property.ltv * 100) + %); safeSetTextContent(result-mortgage, formatCurrency(property.results.mortgageAmount)); safeSetTextContent(result-sf-amount, formatCurrency(property.results.sfAmount)); safeSetTextContent(result-to-seller, formatCurrency(property.results.toSeller)); safeSetTextContent(offer-to-seller, formatCurrency(property.results.toSeller)); safeSetTextContent(result-to-buyer, formatCurrency(property.results.toBuyer)); // Monthly Cash Flow safeSetTextContent(result-monthly-income, formatCurrency(property.results.monthlyIncome)); safeSetTextContent(result-pi, formatCurrency(property.results.monthlyExpenses.pi)); safeSetTextContent(result-taxes, formatCurrency(property.results.monthlyExpenses.taxes)); safeSetTextContent(result-insurance, formatCurrency(property.results.monthlyExpenses.insurance)); safeSetTextContent(result-sf-payment, formatCurrency(property.results.monthlyExpenses.sfPayment)); safeSetTextContent(offer-sf-payment, formatCurrency(property.results.monthlyExpenses.sfPayment)); safeSetTextContent(offer-sf-amount, formatCurrency(property.results.monthlyExpenses.sfAmount)); safeSetTextContent(result-management, formatCurrency(property.results.monthlyExpenses.management)); safeSetTextContent(result-vacancy, formatCurrency(property.results.monthlyExpenses.vacancy)); safeSetTextContent(result-maintenance, formatCurrency(property.results.monthlyExpenses.maintenance)); // Net Cash Flow safeSetClassAndText( result-net-cash-flow, formatCurrency(property.results.netCashFlow), result-value + (property.results.netCashFlow > 0 ? positive : negative) ); } // Format currency values function formatCurrency(value) { return new Intl.NumberFormat(en-US, { style: currency, currency: USD, minimumFractionDigits: 2, maximumFractionDigits: 2 }).format(value); } // Reset the form function resetForm() { propertyForm.reset(); resultsCard.classList.remove(active); currentProperty null; updatePropertyTypeText(); } // Save property to localStorage function saveProperty() { if (!currentProperty) return; // Get existing saved properties let savedProperties getSavedProperties(); // Add current property to saved properties savedProperties.push(currentProperty); // Save to localStorage saveToLocalStorage(savedProperties); // Refresh saved properties list displaySavedProperties(savedProperties); // Show success message alert(Property saved successfully!); } // Get saved properties from localStorage function getSavedProperties() { const savedPropertiesData localStorage.getItem(STORAGE_KEY); return savedPropertiesData ? JSON.parse(savedPropertiesData) : ; } // Save properties to localStorage function saveToLocalStorage(properties) { localStorage.setItem(STORAGE_KEY, JSON.stringify(properties)); } // Load saved properties from localStorage function loadSavedProperties() { const savedProperties getSavedProperties(); displaySavedProperties(savedProperties); } // Display saved properties function displaySavedProperties(properties) { // Clear the list savedPropertiesList.innerHTML ; // Show message if no saved properties if (properties.length 0) { savedPropertiesList.appendChild(noSavedProperties); return; } // Add each property to the list properties.forEach((property, index) > { const propertyCard createPropertyCard(property, index); savedPropertiesList.appendChild(propertyCard); }); } // Create a property card element function createPropertyCard(property, index) { const card document.createElement(div); card.className property-card; card.dataset.index index; // Check if user settings exist const userSettingsData localStorage.getItem(USER_SETTINGS_KEY); const hasUserSettings !!userSettingsData; // Property header const header document.createElement(div); header.className property-header; const address document.createElement(div); address.className property-address; address.textContent property.address; const type document.createElement(div); type.className property-type; type.textContent property.isSTR ? STR : LTR; header.appendChild(address); header.appendChild(type); // Property summary const summary document.createElement(div); summary.className property-summary; const price document.createElement(div); price.className property-price; price.innerHTML `div classproperty-label>Purchase Price/div> div classproperty-value>${formatCurrency(property.purchasePrice)}/div>`; const income document.createElement(div); income.className property-income; income.innerHTML `div classproperty-label>Monthly Income/div> div classproperty-value>${formatCurrency(property.results.monthlyIncome)}/div>`; const net document.createElement(div); net.className property-net; net.innerHTML `div classproperty-label>Net Cash Flow/div> div classproperty-value ${property.results.netCashFlow > 0 ? positive : negative}> ${formatCurrency(property.results.netCashFlow)} /div>`; summary.appendChild(price); summary.appendChild(income); summary.appendChild(net); // Property actions const actions document.createElement(div); actions.className property-actions; const viewBtn document.createElement(button); viewBtn.className btn-sm; viewBtn.textContent View Details; viewBtn.addEventListener(click, (e) > { e.stopPropagation(); togglePropertyDetails(card); }); const sendToChadBtn document.createElement(button); sendToChadBtn.className btn-sm; sendToChadBtn.textContent property.sentToChad ? Property Sent : Send to Chad; sendToChadBtn.disabled !hasUserSettings || property.sentToChad; sendToChadBtn.style.backgroundColor !hasUserSettings ? #6c757d : ; if (property.sentToChad) { sendToChadBtn.classList.add(btn-success); sendToChadBtn.title This property has already been sent; } else if (!hasUserSettings) { sendToChadBtn.title Please save your user information first; addToggleUserSettingsClickEvent(sendToChadBtn); } sendToChadBtn.addEventListener(click, (e) > { e.stopPropagation(); // If user settings dont exist, scroll to top and open settings const userSettingsData localStorage.getItem(USER_SETTINGS_KEY); if (!userSettingsData && !property.sentToChad) { window.scrollTo(0, 0); document.getElementById(userSettingsSection).style.display block; return; } // Otherwise proceed with sending if (!property.sentToChad) { sendPropertyToChad(property, sendToChadBtn, index); } }); const loadBtn document.createElement(button); loadBtn.className btn-sm; loadBtn.textContent Load; loadBtn.addEventListener(click, (e) > { e.stopPropagation(); loadProperty(index); }); const deleteBtn document.createElement(button); deleteBtn.className btn-sm btn-delete; deleteBtn.textContent Delete; deleteBtn.addEventListener(click, (e) > { e.stopPropagation(); deleteProperty(index); }); actions.appendChild(viewBtn); actions.appendChild(sendToChadBtn); actions.appendChild(loadBtn); actions.appendChild(deleteBtn); // Property details (hidden by default) const details document.createElement(div); details.className property-details; details.innerHTML ` div classresult-section> h3>The Deal/h3> div classresult-row> span classresult-label>Does this work? (1-2 is likely, greater than 2, yes!)/span> span classresult-value>${property.results.doesThisWork}/span> /div> div classresult-row> span classresult-label>Seller Financing:/span> span classresult-value>${formatCurrency(property.results.sfAmount)}/span> /div> div classresult-row> span classresult-label>To Seller at Closing:/span> span classresult-value>${formatCurrency(property.results.toSeller)}/span> /div> div classresult-row> span classresult-label>To Bird Dog:/span> span classresult-value>${formatCurrency(property.results.birdDog)}/span> /div> div classresult-row> span classresult-label>Margin:/span> span classresult-value>${formatCurrency(property.results.netCashFlow * .7)}/span> /div> /div> div classresult-section> h3>Purchase Structure/h3> div classresult-row> span classresult-label>Mortgage Amount (${property.ltv * 100}%):/span> span classresult-value>${formatCurrency(property.results.mortgageAmount)}/span> /div> div classresult-row> span classresult-label>Seller Financing:/span> span classresult-value>${formatCurrency(property.results.sfAmount)}/span> /div> div classresult-row> span classresult-label>To Seller at Closing:/span> span classresult-value>${formatCurrency(property.results.toSeller)}/span> /div> div classresult-row> span classresult-label>To Buyer at Closing:/span> span classresult-value>${formatCurrency(property.results.toBuyer)}/span> /div> /div> div classresult-section> h3>Monthly Cash Flow/h3> div classresult-row> span classresult-label>P&I:/span> span classresult-value>${formatCurrency(property.results.monthlyExpenses.pi)}/span> /div> div classresult-row> span classresult-label>Taxes:/span> span classresult-value>${formatCurrency(property.results.monthlyExpenses.taxes)}/span> /div> div classresult-row> span classresult-label>Insurance:/span> span classresult-value>${formatCurrency(property.results.monthlyExpenses.insurance)}/span> /div> div classresult-row> span classresult-label>SF Payment:/span> span classresult-value>${formatCurrency(property.results.monthlyExpenses.sfPayment)}/span> /div> div classresult-row> span classresult-label>Management:/span> span classresult-value>${formatCurrency(property.results.monthlyExpenses.management)}/span> /div> div classresult-row> span classresult-label>Vacancy:/span> span classresult-value>${formatCurrency(property.results.monthlyExpenses.vacancy)}/span> /div> div classresult-row> span classresult-label>Maintenance:/span> span classresult-value>${formatCurrency(property.results.monthlyExpenses.maintenance)}/span> /div> /div> div classresult-section styledisplay:none;> h3>Tax Benefits (Annual)/h3> div classresult-row> span classresult-label>Rental Profit:/span> span classresult-value ${property.results.rentalProfit > 0 ? positive : negative}> ${formatCurrency(property.results.rentalProfit)} /span> /div> div classresult-row> span classresult-label>Depreciation:/span> span classresult-value>${formatCurrency(property.results.depreciation)}/span> /div> div classresult-row> span classresult-label>Taxable Income:/span> span classresult-value ${property.results.taxableIncome > 0 ? positive : negative}> ${formatCurrency(property.results.taxableIncome)} /span> /div> div classresult-row> span classresult-label>Taxes:/span> span classresult-value>${formatCurrency(property.results.incomeTaxes)}/span> /div> div classresult-row> span classresult-label>NET NET:/span> span classresult-value ${property.results.netNet > 0 ? positive : negative}> ${formatCurrency(property.results.netNet)} /span> /div> /div> `; // Add all elements to the card card.appendChild(header); card.appendChild(summary); card.appendChild(actions); card.appendChild(details); // Add click event to toggle details card.addEventListener(click, () > { togglePropertyDetails(card); }); return card; } // Toggle property details visibility function togglePropertyDetails(card) { const details card.querySelector(.property-details); details.classList.toggle(active); } // Load a saved property into the form function loadProperty(index) { const savedProperties getSavedProperties(); const property savedPropertiesindex; if (!property) return; // Fill form with property data document.getElementById(address).value property.address; document.getElementById(city).value property.city; document.getElementById(state).value property.state; document.getElementById(postal_code).value property.postal_code; document.getElementById(purchasePrice).value property.purchasePrice; document.getElementById(income).value property.results.monthlyIncome; var tempSetLtv property.ltv.toString(); if (tempSetLtv.length 4) { tempSetLtv tempSetLtv + 0; } document.getElementById(ltv).value tempSetLtv; propertyTypeCheckbox.checked property.isSTR; updatePropertyTypeText(); // Calculate and display results currentProperty property; displayResults(property); resultsCard.classList.add(active); // Scroll to top window.scrollTo(0, 0); } // Delete a saved property function deleteProperty(index) { if (!confirm(Are you sure you want to delete this property?)) return; const savedProperties getSavedProperties(); savedProperties.splice(index, 1); // Save updated properties to localStorage saveToLocalStorage(savedProperties); // Refresh saved properties list displaySavedProperties(savedProperties); } // Add a new property (reset form) function addNewProperty() { resetForm(); window.scrollTo(0, 0); } function flattenFormData(data, parentKey , result {}) { for (const key in data) { if (!data.hasOwnProperty(key)) continue; const value datakey; const newKey parentKey ? `${parentKey}${key}` : key; if (typeof value object && value ! null) { flattenFormData(value, newKey, result); } else { resultnewKey value ! null && value ! undefined ? String(value) : ; } } return result;} function sendPropertyToChad(property, button, index) { const userSettingsData localStorage.getItem(USER_SETTINGS_KEY); if (!userSettingsData) { alert(Please save your user information before sending property data.); return; } const userSettings JSON.parse(userSettingsData); const formData { first_name: userSettings.firstName, last_name: userSettings.lastName, phone: userSettings.phone, email: userSettings.email, address: property.address, fpLFP4WsAbDHoqFIOPAq: userSettings.userAddress, city: property.city, state: property.state, postal_code: property.postal_code, country: property.country, purchasePrice: property.purchasePrice, monthlyIncome: property.results.monthlyIncome, mortgageAmount: property.results.mortgageAmount, sfAmount: property.results.sfAmount, toSeller: property.results.toSeller, toBuyer: property.results.toBuyer, fromClosing: property.results.fromClosing, closingCosts: property.results.closingCosts, netCashFlow: property.results.netCashFlow, transactionalFee: property.results.transactionalFee, tcFee: property.results.tcFee, originationFee: property.results.originationFee, birdDog: property.results.birdDog, toChad: property.results.toChad, lendProfit: property.results.lendProfit, profit: property.results.profit, pi: property.results.monthlyExpenses.pi, taxes: property.results.monthlyExpenses.taxes, insurance: property.results.monthlyExpenses.insurance, sfPayment: property.results.monthlyExpenses.sfPayment, management: property.results.monthlyExpenses.management, vacancy: property.results.monthlyExpenses.vacancy, maintenance: property.results.monthlyExpenses.maintenance, rentalProfit: property.results.rentalProfit, depreciation: property.results.depreciation, taxableIncome: property.results.taxableIncome, incomeTaxes: property.results.incomeTaxes, netNet: property.results.netNet, isSTR: property.isSTR ? STR : LTR }; button.disabled true; button.textContent Sending...; fetch(https://services.leadconnectorhq.com/hooks/OZzNzrJKm0yjQndmk9Fo/webhook-trigger/8247ca02-bc89-43d6-ad9a-6f21238f1ebf, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify(formData) }) .then(response > { if (!response.ok) throw new Error(`HTTP ${response.status}`); return response.json(); }) .then(result > { console.log(Webhook response:, result); button.textContent Property Sent; button.classList.add(btn-success); const savedProperties getSavedProperties(); if (savedPropertiesindex) { savedPropertiesindex.sentToChad true; saveToLocalStorage(savedProperties); } alert(Property details successfully sent to Chad!); }) .catch(error > { console.error(Error submitting to webhook:, error); button.textContent Send Failed - Retry; button.disabled false; alert(Submission failed. Please try again.); });}; // Initialize the application document.addEventListener(DOMContentLoaded, init); /script>/body>/html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]