PortaCraft - Project Overview & Implementation Guide
Project Name
PortaCraft - Online Portfolio Generator
Project Summary
PortaCraft is a web-based tool that allows users to generate professional, customizable portfolio websites
using pre-designed templates. It targets students and professionals who want to create impressive online
resumes or portfolios without coding. Users can fill out forms with their information, choose a design
template, see a live preview, and download or publish their portfolio.
Technology Stack
- Frontend: React, Vite
- Styling: Tailwind CSS
- State Management: useState (or useReducer/Redux if scaling)
- Optional: react-to-print (for PDF export), JSZip (for HTML zip export), Firebase (for hosting and login)
How User Enters Data
Users enter their information through a form: name, bio, skills, projects, and theme choice. Each input
updates a state variable (formData) in real-time using React's useState hook.
Live Preview Connection
React's state is passed as props to the selected template component. As formData updates, the template
component re-renders automatically with new data. This enables a real-time live preview.
Templates Implementation
Templates are created as React components and placed in 'src/components/templates/'. Each receives
formData as props and uses Tailwind for styling. Users can switch between templates using a dropdown that
updates [Link].
Where User Data is Stored
User-entered data is stored in a central useState object in [Link]. It looks like:
PortaCraft - Project Overview & Implementation Guide
const [formData, setFormData] = useState({ name: '', bio: '', skills: [], projects: [], theme: 'classic' });
How to Download Portfolio as PDF
Use react-to-print to generate a PDF of the live preview. It captures the exact visual look of the portfolio (not
the code). You wrap the template component in a ref and trigger print/download with a button.
Is Code Included in the PDF?
No. The PDF generated shows only the visual portfolio, like a resume. It does not include React code, state,
or internal logic. It looks like what the user sees in preview.
Alternative Export Option - ZIP with HTML/CSS
For exporting as code files (HTML/CSS), use JSZip and [Link]. This requires serializing the formData
into an HTML string, bundling it into a .zip file, and triggering a download. It's more complex but allows the
user to get the actual source files.