Loading Single-Member LLC Operating Agreement Generator... If this message persists, please ensure JavaScript is enabled in your browser.
'; // Convert HTML to Blob const blob = new Blob([htmlContent], { type: 'application/vnd.ms-word;charset=utf-8' }); // Create download link and trigger download const link = document.createElement('a'); link.href = URL.createObjectURL(blob); link.download = `${formData.companyName ? formData.companyName.replace(/\s+/g, '-') : 'SMLLC-Operating-Agreement'}.doc`; document.body.appendChild(link); link.click(); document.body.removeChild(link); console.log("Document generated and download triggered"); } catch (error) { console.error("Error generating Word document:", error); alert("Error generating Word document. Please try again or use the copy option."); } }; // Main Generator Component const SMOAGenerator = () => { // Tab configuration - simplified tabs const tabs = [ { id: 'company-info', label: 'Company Information' }, { id: 'business-details', label: 'Business Details' }, { id: 'member-details', label: 'Member Details' }, { id: 'capital-distributions', label: 'Capital & Distributions' }, { id: 'management', label: 'Management' }, { id: 'dissolution', label: 'Dissolution & Amendments' } ]; // State for current tab const [currentTab, setCurrentTab] = useState(0); // State for form data - removed unnecessary fields const [formData, setFormData] = useState({ // Company Information companyName: "", stateOfFormation: "", principalOfficeAddress: "", formationDate: "", effectiveDate: "", // Business Details businessPurpose: "engaging in any lawful business activity for which Limited Liability Companies may be organized in the State.", fiscalYearEnd: "December 31", registeredAgent: "", registeredOfficeAddress: "", // Member Details memberName: "", memberAddress: "", // Capital & Distributions initialCapitalContribution: "1,000", additionalCapitalRequired: false, profitDistributionFrequency: "quarterly", distributionLimitations: true, // Management useManagerName: false, managerName: "", // Dissolution & Amendments allowAmendmentByManager: false, specifySucessorMember: false, successorMemberName: "", successorMemberAddress: "" }); // State to track what was last changed const [lastChanged, setLastChanged] = useState(null); // Ref for preview content div const previewRef = useRef(null); // State for the document text const [documentText, setDocumentText] = useState(""); // Generate the document text whenever form data changes useEffect(() => { const text = generateDocument(formData); setDocumentText(text); }, [formData]); // Initial generation on component mount useEffect(() => { setDocumentText(generateDocument(formData)); }, []); // Handle input changes const handleChange = (e) => { const { name, value, type, checked } = e.target; // Record what field was changed for highlighting setLastChanged(name); // Update form data setFormData(prev => ({ ...prev, [name]: type === 'checkbox' ? checked : value })); }; // Navigation functions const nextTab = () => { if (currentTab < tabs.length - 1) { setCurrentTab(currentTab + 1); } }; const prevTab = () => { if (currentTab > 0) { setCurrentTab(currentTab - 1); } }; const goToTab = (index) => { setCurrentTab(index); }; // Copy to clipboard function const copyToClipboard = () => { try { navigator.clipboard.writeText(documentText); alert("Document copied to clipboard!"); } catch (error) { console.error("Error copying to clipboard:", error); alert("Unable to copy to clipboard. Please try again."); } }; // Download as Word function const downloadAsWord = () => { try { window.generateWordDoc(documentText, formData); } catch (error) { console.error("Error generating Word document:", error); alert("Error generating Word document. Please try again or use the copy option."); } }; // Function to determine which section to highlight based on the last changed field const getSectionToHighlight = () => { // Company Information fields if (['companyName', 'stateOfFormation', 'principalOfficeAddress', 'formationDate', 'effectiveDate'].includes(lastChanged)) { return 'company-info'; } // Business Details fields if (['businessPurpose', 'fiscalYearEnd', 'registeredAgent', 'registeredOfficeAddress'].includes(lastChanged)) { return 'business-details'; } // Member Details fields if (['memberName', 'memberAddress'].includes(lastChanged)) { return 'member-details'; } // Capital & Distributions fields if (['initialCapitalContribution', 'additionalCapitalRequired', 'profitDistributionFrequency', 'distributionLimitations'].includes(lastChanged)) { return 'capital-distributions'; } // Management fields if (['managerName', 'useManagerName'].includes(lastChanged)) { return 'management'; } // Dissolution & Amendments fields if (['allowAmendmentByManager', 'specifySucessorMember', 'successorMemberName', 'successorMemberAddress'].includes(lastChanged)) { return 'dissolution-amendments'; } return null; }; // Function to create a highlighted version of the text const createHighlightedText = () => { const sectionType = getSectionToHighlight(); if (!sectionType || !lastChanged) return documentText; // Define regex patterns for different sections const patterns = { 'company-info': { companyName: formData.companyName ? new RegExp(`(${formData.companyName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null, stateOfFormation: formData.stateOfFormation ? new RegExp(`(${formData.stateOfFormation.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null, principalOfficeAddress: formData.principalOfficeAddress ? new RegExp(`(${formData.principalOfficeAddress.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null, formationDate: formData.formationDate ? new RegExp(`(${formData.formationDate.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null, effectiveDate: formData.effectiveDate ? new RegExp(`(${formData.effectiveDate.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null }, 'business-details': { businessPurpose: formData.businessPurpose ? new RegExp(`(${formData.businessPurpose.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null, fiscalYearEnd: formData.fiscalYearEnd ? new RegExp(`(${formData.fiscalYearEnd.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null, registeredAgent: formData.registeredAgent ? new RegExp(`(${formData.registeredAgent.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null, registeredOfficeAddress: formData.registeredOfficeAddress ? new RegExp(`(${formData.registeredOfficeAddress.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null }, 'member-details': { memberName: formData.memberName ? new RegExp(`(${formData.memberName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null, memberAddress: formData.memberAddress ? new RegExp(`(${formData.memberAddress.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null }, 'capital-distributions': { initialCapitalContribution: formData.initialCapitalContribution ? new RegExp(`(\\$${formData.initialCapitalContribution.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null, additionalCapitalRequired: new RegExp(`(Additional capital contributions ${formData.additionalCapitalRequired ? 'are' : 'are not'} required)`, 'g'), profitDistributionFrequency: formData.profitDistributionFrequency ? new RegExp(`(${formData.profitDistributionFrequency.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null, distributionLimitations: new RegExp(`(Distributions shall be made only when)`, 'g') }, 'management': { managerName: (formData.useManagerName ? formData.managerName : formData.memberName) ? new RegExp(`(${(formData.useManagerName ? formData.managerName : formData.memberName).replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null }, 'dissolution-amendments': { allowAmendmentByManager: new RegExp(`(${formData.allowAmendmentByManager ? 'may' : 'may not'} be amended by the Manager)`, 'g'), successorMemberName: formData.specifySucessorMember && formData.successorMemberName ? new RegExp(`(${formData.successorMemberName.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null, successorMemberAddress: formData.specifySucessorMember && formData.successorMemberAddress ? new RegExp(`(${formData.successorMemberAddress.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')})`, 'g') : null } }; // Get the pattern for the last changed field const pattern = patterns[sectionType] && patterns[sectionType][lastChanged]; if (!pattern) return documentText; // Replace the matched text with highlighted version return documentText.replace(pattern, match => `${match}` ); }; // Create highlightable content const highlightedText = createHighlightedText(); // Effect to scroll to highlighted text useEffect(() => { if (previewRef.current && lastChanged) { setTimeout(() => { const highlightedElement = previewRef.current.querySelector('.highlighted-text'); if (highlightedElement) { highlightedElement.scrollIntoView({ behavior: 'smooth', block: 'center' }); } }, 100); } }, [highlightedText, lastChanged]); // Function to create formatted title HTML with proper styling for preview const formatTitle = (companyName, stateName) => { const stateArticle = getStateArticle(stateName); const upperStateName = stateName ? stateName.toUpperCase() : '[STATE]'; return `
OPERATING AGREEMENT
OF
${companyName ? companyName.toUpperCase() : '[COMPANY NAME]'}
${stateArticle} ${upperStateName} SINGLE-MEMBER LIMITED LIABILITY COMPANY
`; }; // Generate document text - always generate even with partial data const generateDocument = (data) => { const { companyName = "[COMPANY NAME]", stateOfFormation = "[STATE]", principalOfficeAddress = "[PRINCIPAL OFFICE ADDRESS]", formationDate = "[FORMATION DATE]", effectiveDate = "", businessPurpose = "engaging in any lawful business activity for which Limited Liability Companies may be organized in the State.", fiscalYearEnd = "December 31", registeredAgent = "", registeredOfficeAddress = "", memberName = "[MEMBER NAME]", memberAddress = "[MEMBER ADDRESS]", initialCapitalContribution = "1,000", additionalCapitalRequired = false, profitDistributionFrequency = "quarterly", distributionLimitations = true, managerName = "", useManagerName = false, allowAmendmentByManager = false, specifySucessorMember = false, successorMemberName = "", successorMemberAddress = "" } = data; // Use member name as manager if no manager specified const actualManagerName = useManagerName && managerName ? managerName : memberName; // Format today's date const today = new Date(); const formattedDate = today.toLocaleDateString('en-US', { year: 'numeric', month: 'long', day: 'numeric' }); // Use placeholder if registered agent is empty const actualRegisteredAgent = registeredAgent || memberName; // Use principal address if registered office address is empty const actualRegisteredOfficeAddress = registeredOfficeAddress || principalOfficeAddress; // Get formatted title HTML for preview const formattedTitle = formatTitle(companyName, stateOfFormation); return `${formattedTitle} This Operating Agreement (the "Agreement") is made and entered into as of ${effectiveDate || formattedDate} by and for the benefit of ${memberName} (the "Member"), as the sole member of ${companyName} (the "Company"), a single-member limited liability company organized under the laws of the State of ${stateOfFormation}. ARTICLE 1 FORMATION OF THE LIMITED LIABILITY COMPANY 1.1. Formation. The Company was formed on ${formationDate} when Articles of Organization were filed with the Secretary of State of ${stateOfFormation} in accordance with the laws of the State of ${stateOfFormation}. 1.2. Name. The name of the Company is ${companyName}. 1.3. Principal Place of Business. The principal place of business of the Company shall be located at ${principalOfficeAddress}, or such other location as determined by the Member. 1.4. Registered Office and Agent. The registered office of the Company shall be located at ${actualRegisteredOfficeAddress}, and the registered agent shall be ${actualRegisteredAgent}. 1.5. Term. The Company shall continue perpetually unless dissolved in accordance with this Agreement or as otherwise provided by law. 1.6. Purpose. The purpose of the Company is to engage in ${businessPurpose} 1.7. Intent. It is the intent of the Member that the Company be operated in a manner consistent with its treatment as a "disregarded entity" for federal and state income tax purposes. The Member shall not take any action inconsistent with the treatment of the Company as a disregarded entity for tax purposes. ARTICLE 2 MEMBER INFORMATION 2.1. Member. The name and address of the sole Member of the Company is: Name: ${memberName} Address: ${memberAddress} ARTICLE 3 CAPITAL CONTRIBUTIONS AND DISTRIBUTIONS 3.1. Initial Capital Contribution. The Member has contributed $${initialCapitalContribution} to the Company as an initial capital contribution. 3.2. Additional Capital Contributions. Additional capital contributions ${additionalCapitalRequired ? 'are' : 'are not'} required from the Member. ${additionalCapitalRequired ? 'The Member may contribute additional capital to the Company as necessary to meet the Company\'s financial obligations and operational needs.' : 'However, the Member may make additional capital contributions at their discretion.'} 3.3. Capital Accounts. A capital account shall be maintained for the Member in accordance with applicable tax regulations. 3.4. Distributions. Distributions of cash or other assets shall be made to the Member at times determined by the Member, but no less than ${profitDistributionFrequency}. ${distributionLimitations ? 'Distributions shall be made only when the Company has sufficient cash that exceeds its current and anticipated expenses, including reasonable reserves for future expenses, liabilities, and contingencies.' : 'Distributions may be made at the Member\'s discretion.'} 3.5. Tax Distributions. The Company shall make distributions to the Member in amounts necessary to satisfy the Member's tax obligations arising from the Company's operations. ARTICLE 4 MANAGEMENT AND OPERATIONS 4.1. Management. The business and affairs of the Company shall be managed by ${actualManagerName} (the "Manager"). 4.2. Authority of Manager. The Manager shall have full and complete authority, power, and discretion to manage and control the business, affairs, and properties of the Company, to make all decisions regarding those matters, and to perform any and all other acts or activities customary or incidental to the management of the Company's business. 4.3. Banking. All funds of the Company shall be deposited in a bank account or accounts in the name of the Company. Withdrawals from such accounts shall require the signature of ${actualManagerName}. 4.4. Fiscal Year. The fiscal year of the Company shall end on ${fiscalYearEnd}. 4.5. Books and Records. The Company shall maintain complete and accurate books and records of the Company's business and affairs as required by applicable law, and such books and records shall be available for inspection by the Member at any time. 4.6. Indemnification. The Company shall indemnify the Member to the fullest extent permitted by law against all claims and liabilities arising in connection with the business of the Company. ARTICLE 5 TRANSFER OF MEMBERSHIP INTEREST 5.1. Transfer Restrictions. The Member may transfer all or any portion of the Member's interest in the Company at any time. Any transferee shall immediately become a Member of the Company upon the completion of the transfer. 5.2. Death or Incapacity of Member. In the event of the death or incapacity of the Member, ${specifySucessorMember ? `${successorMemberName} of ${successorMemberAddress} shall become the successor Member of the Company.` : 'the Member\'s estate, heir, or legal representative shall become the successor Member of the Company.'} ARTICLE 6 DISSOLUTION AND WINDING UP 6.1. Dissolution. The Company shall be dissolved upon the occurrence of any of the following events: (a) The written decision of the Member to dissolve the Company; (b) The death or incapacity of the Member, unless provision is made for the succession of a new Member; (c) The bankruptcy or insolvency of the Member; or (d) As otherwise required by law. 6.2. Winding Up. Upon dissolution, the Company shall cease carrying on its business, except as necessary to wind up its business and affairs. The Member shall be responsible for winding up the affairs of the Company and shall take full account of the Company's assets and liabilities. 6.3. Distribution of Assets. Upon the winding up of the Company, the assets shall be distributed as follows: (a) To creditors, including the Member if a creditor, in satisfaction of the Company's liabilities; and (b) To the Member. ARTICLE 7 MISCELLANEOUS PROVISIONS 7.1. Amendment. This Agreement ${allowAmendmentByManager ? 'may' : 'may not'} be amended by the Manager. Any amendment requires the written consent of the Member. 7.2. Governing Law. This Agreement shall be governed by and construed in accordance with the laws of the State of ${stateOfFormation}. 7.3. Entire Agreement. This Agreement constitutes the entire agreement of the Member with respect to the Company and supersedes all prior agreements or understandings with respect to the Company, whether written or oral. 7.4. Severability. If any provision of this Agreement is held to be illegal, invalid, or unenforceable, such provision shall be fully severable, and this Agreement shall be construed as if such provision had never been a part of this Agreement, with the remaining provisions remaining in full force and effect. 7.5. Binding Effect. This Agreement shall be binding upon and inure to the benefit of the Member, the Member's heirs, successors, assigns, and personal representatives. 7.6. Counterparts. This Agreement may be executed in counterparts, each of which shall be deemed an original, but all of which together shall constitute one and the same instrument. 7.7. Electronic Signatures. Electronic signatures shall be deemed to be original signatures for all purposes of this Agreement. IN WITNESS WHEREOF, the undersigned, being the sole Member of the Company, has executed this Operating Agreement as of the date first written above. MEMBER: _______________________________ ${memberName} ${formattedDate} `; }; // Render the component return (

Single-Member LLC Operating Agreement Generator

{/* Form Panel */}

Create Your Operating Agreement

{/* Tab Navigation */}
{tabs.map((tab, index) => ( ))}
{/* Tab 1: Company Information */} {currentTab === 0 && (
)} {/* Tab 2: Business Details */} {currentTab === 1 && (

Tip: A broad business purpose gives you flexibility to pivot your business.

Tip: Most small businesses use December 31 to align with personal taxes.

If left blank, the Member will be designated as the Registered Agent.

If left blank, the Principal Office Address will be used.

)} {/* Tab 3: Member Details */} {currentTab === 2 && (
)} {/* Tab 4: Capital & Distributions */} {currentTab === 3 && (

Enter the amount (numbers only or with commas).

This helps protect the business from being drained of operating capital.

)} {/* Tab 5: Management */} {currentTab === 4 && (
{formData.useManagerName && (
)}
)} {/* Tab 6: Dissolution & Amendments */} {currentTab === 5 && (

The member's written consent is still required for any amendment.

This does not replace proper estate planning. Consult with an attorney.

{formData.specifySucessorMember && ( <>
)}
)} {/* Navigation Buttons */}
{/* Action Buttons */}
{/* Copy to clipboard button */} {/* Download MS Word button */} {/* Schedule consultation button */}
{/* Preview Panel */}

Live Preview

                                
); }; try { // Initialize Feather icons document.addEventListener("DOMContentLoaded", function() { console.log("Initializing Feather icons"); try { feather.replace(); console.log("Feather icons initialized"); } catch (error) { console.error("Error initializing Feather icons:", error); } }); // Render the main app console.log("Rendering main application"); ReactDOM.render(, document.getElementById('root')); console.log("Application rendered successfully"); } catch (error) { console.error("Error during application initialization:", error); document.getElementById('root').innerHTML = '
' + '

Error Initializing Application

' + '

' + error.message + '

' + '

Please try refreshing the page or using a different browser.

' + '

If the problem persists, you can use our simplified version.

' + '
'; }