Files
Portfolio/content/public/portfolio-content.json

387 lines
21 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"identity": {
"name": "Luca Pîslaru",
"role": "System Administrator & Full-Stack Developer",
"valueProposition": "I build full-stack software and operate the Linux systems behind it, from offline-first applications to access-controlled self-hosted services and careful data migrations.",
"location": { "city": "Bucharest", "country": "Romania", "countryCode": "RO" },
"availability": "Based in Bucharest and open to on-site, hybrid, or remote roles locally, as well as international remote opportunities."
},
"navigation": [
{ "id": "start", "label": "Start" },
{ "id": "profile", "label": "Profile" },
{ "id": "experience", "label": "Experience" },
{ "id": "infrastructure", "label": "Infrastructure" },
{ "id": "selected-builds", "label": "Selected builds" },
{ "id": "additional-work", "label": "Additional work" },
{ "id": "toolkit", "label": "Toolkit" },
{ "id": "contact", "label": "Contact" }
],
"profile": {
"introduction": "I’m an early-career technologist working across Linux administration and end-to-end application development. I value systems that can be understood, maintained, secured, and recovered: clear access boundaries, deliberate deployments, useful documentation, and software refined through real use.",
"screeningFacts": [
{ "label": "Education", "value": "Bachelor's degree in Business Management IT, Romanian-American University, 2023-2026" },
{ "label": "Languages", "value": "Romanian (native), English (C2), French (A1)" },
{ "label": "Certifications", "value": "Advanced Digital Competencies Certificate, 2025; PCEP - Certified Entry-Level Python Programmer, 2022" }
]
},
"experience": [
{
"id": "trupa-lui-razus",
"role": "Full-Stack Developer & Hosting Administrator (Collaborator)",
"organization": "Trupa lui Răzuș",
"dates": "August 2025-Present",
"location": "Bucharest, Romania",
"highlights": [
"Built the theatre group's first owned web presence, replacing a social-media-only discovery path with an indexable website and direct contact options.",
"Developed a custom Vue frontend and a headless WordPress publishing workflow that lets an editor publish news and promotional content without changing code.",
"Configured role-separated CMS access and restricted administrative routes and endpoints while keeping exact access rules private.",
"Manage the domain, cPanel hosting, DNS/TLS configuration, custom .htaccess behavior, and controlled Git/SSH deployments with verification and rollback."
]
},
{
"id": "camera-consultantilor-fiscali",
"role": "Green Innovation Intern",
"organization": "Camera Consultanților Fiscali",
"dates": "June 2025-August 2025",
"location": "Bucharest, Romania",
"highlights": [
"Contributed to eco-innovation work within the INOVATIV 2030 program.",
"Developed and presented sustainable-technology business models."
]
},
{
"id": "isense-solutions",
"role": "Data Science Intern",
"organization": "iSense Solutions",
"dates": "June 2025-August 2025",
"location": "Bucharest, Romania",
"highlights": [
"Processed and analyzed datasets using SPSS and Microsoft Excel.",
"Prepared quantitative reports supporting business-development decisions."
]
}
],
"systemsOperations": {
"id": "professional-systems-operations",
"title": "Professional systems operations",
"summary": "Application delivery and hosting work with explicit boundaries between public content, authenticated administration, controlled releases, and recovery.",
"evidence": [
"Public Vue frontend backed by a role-separated headless WordPress editing workflow.",
"Private source control followed by a deliberate SSH deployment, post-release verification, and Git-based rollback path.",
"Domain, DNS, TLS, cPanel, and restricted-route administration performed alongside application development."
]
},
"infrastructure": {
"id": "self-hosted-platform-lifecycle",
"title": "Secure self-hosted platform and lifecycle",
"summary": "A self-hosted Linux environment operated as a long-term systems practice: traffic enters through a controlled edge, selected services receive an additional identity boundary, changes are staged deliberately, and important data has local and offsite recovery paths.",
"bands": [
{
"id": "ingress-and-tls",
"title": "Ingress and TLS",
"summary": "Route services through Nginx, manage DNS and certificate lifecycle, and use Fail2Ban at exposed entry points."
},
{
"id": "identity-and-access",
"title": "Identity and access",
"summary": "Place selected services behind Authelia and constrain administrative, filesystem, and container access without publishing the underlying policy."
},
{
"id": "service-lifecycle",
"title": "Service lifecycle",
"summary": "Deploy and update services with Docker Compose, including a full platform migration from a Raspberry Pi to a dedicated Linux server."
},
{
"id": "operations-and-recovery",
"title": "Operations and recovery",
"summary": "Use Btrfs storage, a pre-upgrade backup script, rsync-based copies, and an offsite backup for important data."
}
],
"featuredOperation": {
"title": "Migrating a stateful Nextcloud service",
"context": "The existing standalone deployment contained much more than files: contacts, calendars, tasks, and collaboration data all had to survive a move to Nextcloud All-in-One.",
"actions": [
"Aligned application versions and updated installed applications before migration.",
"Backed up the source deployment and prepared rollback checkpoints.",
"Converted the existing MySQL database to PostgreSQL before the All-in-One migration.",
"Exported and imported application state, transferred the data directory, corrected ownership and permissions, and preserved required instance configuration.",
"Validated access to the expected files and services before relying on the new deployment."
],
"outcome": "The migration completed without data loss. The All-in-One deployment has remained Luca's active Nextcloud instance for roughly a year, including storage, synchronization, contacts, calendars, tasks, and Nextcloud Talk."
}
},
"projects": {
"selected": [
{
"id": "private-medication-tracker",
"title": "Private self-hosted medication tracker",
"visibility": "private",
"maturity": "active",
"summary": "A solo-built, self-hosted medication-tracking system with an offline-first Flutter client, TypeScript API, PostgreSQL database, and Vue administration interface.",
"problem": "A private medication routine needed dependable offline tracking, reminders, history, and synchronization without turning personal data into a public product.",
"contribution": "Independently designed, implemented, deployed, and operated the complete mobile app, API, administration interface, database, synchronization model, and self-hosted environment.",
"technicalDecisions": [
"Use Flutter, Riverpod, and Drift/SQLite so the mobile workflow remains useful offline and can queue changes before pulling server updates.",
"Use Fastify, TypeScript, Drizzle, and PostgreSQL for the API and synchronized data model, alongside a Vue administration interface.",
"Apply authentication, refresh-token, TOTP, backup-code, biometric-lock, and database access-boundary mechanisms while continuing to harden the system through tests and audit findings.",
"Run the containerized service behind Nginx/TLS and an additional Authelia access layer.",
"Support schedules, as-needed entries, stock tracking, dose history, reminders, background sync, exports, analytics, an Android widget, and English/Romanian localization."
],
"outcome": "The system has supported Luca's private medication tracking consistently for several months. Real use exposed Android reminder failures; investigation restored dependable delivery, and current work is replacing the remaining recurring behavior with occurrence-specific reconciliation to address duplicate and stale reminders. The project works for its current private use but is not presented as production-ready.",
"assetIds": [
"medication-mobile-logs",
"medication-mobile-data-settings",
"medication-mobile-notification-settings"
],
"mediaLayout": "portrait-strip",
"media": [
{
"kind": "image",
"assetId": "medication-mobile-logs",
"alt": "Medication activity screen using an unmistakably fictional demo profile.",
"caption": "Daily activity and history in a fictional demo state.",
"longDescription": "The mobile view groups scheduled entries and their recorded status without exposing real medication information."
},
{
"kind": "image",
"assetId": "medication-mobile-data-settings",
"alt": "Data and synchronization settings for a fictional medication-tracker profile.",
"caption": "Data controls supporting the offline-first workflow.",
"longDescription": "The settings view exposes synchronization and local-data controls used by the private self-hosted system."
},
{
"kind": "image",
"assetId": "medication-mobile-notification-settings",
"alt": "Reminder settings for fictional medication entries.",
"caption": "Reminder controls refined through months of private use.",
"longDescription": "The settings view groups notification behavior and the Android alarm capability used for scheduled reminders."
}
]
},
{
"id": "footy-tracker",
"title": "Footy Tracker",
"visibility": "public",
"maturity": "active",
"summary": "A two-person university computer-vision project that processed previously unseen football footage and generated an annotated output video.",
"problem": "Build a time-constrained demonstration that could identify football players, referees, and the ball in match footage and explore jersey-number recognition.",
"contribution": "Led the project's data and machine-learning work: dataset acquisition and conversion, YOLO configuration and detector training, jersey-classifier design, experimentation, checkpointing, evaluation, and demo integration. A collaborator created the initial repository structure and video-processing pipeline.",
"technicalDecisions": [
"Convert SoccerNet tracking data into a reproducible YOLO training layout and keep training behavior configuration-driven.",
"Compare pretrained ResNet, MobileNet, and EfficientNet variants for jersey classification.",
"Add class weighting, checkpoint/resume, focal loss, mixup/cutmix, label smoothing, and early stopping as controlled experiments rather than assuming each technique would improve the model.",
"Prefer the simpler ResNet34 configuration after an eight-hour ablation set showed that aggressive augmentation increased overfitting and reduced validation performance."
],
"outcome": "The submitted demo processed previously unseen, compressed broadcast footage and retained strong player detection. Measured validation results were 0.942 mAP@0.5 for players, 0.726 for referees, and 0.198 for the ball. The best jersey classifier reached approximately 0.778 validation accuracy, while integrated jersey labels remained inconsistent. The result is a working academic demonstration, not a production tracking system.",
"url": "https://github.com/LucaPisl/footy-tracker",
"assetIds": []
},
{
"id": "opinion-dynamics-simulation",
"title": "Opinion Dynamics Simulation",
"visibility": "public",
"maturity": "experimental",
"summary": "An agent-based research experiment for observing how local interactions, network structure, and cascade conditions shape group-level opinion patterns.",
"problem": "Explore how simplified local rules can produce polarization, rapid cascades, and uneven final distributions.",
"contribution": "Built the simulation and analysis views used to inspect modeled runs and compare changes over time.",
"technicalDecisions": [
"Keep the work explicitly experimental rather than presenting it as a predictive model of real people.",
"Expose polarization, cascade thresholds, graph degree, revolt frequency, and final distributions as inspectable outputs.",
"Document performance and network-formation limitations alongside the results."
],
"outcome": "The project produced useful exploratory visualizations and made the model's assumptions and limitations visible; conclusions remain limited to the simulated scenarios.",
"url": "https://github.com/LucaPisl/opinion-dynamics-simulation",
"assetIds": [
"opinion-polarization-chart",
"opinion-final-distribution-chart"
],
"mediaLayout": "chart-pair",
"media": [
{
"kind": "chart",
"assetId": "opinion-polarization-chart",
"alt": "Line chart showing the modeled polarization index increasing across simulation steps.",
"caption": "Polarization rose quickly and then increased more gradually in this modeled run.",
"chart": {
"variables": "Horizontal axis: simulation step. Vertical axis: polarization index.",
"trend": "The index rises sharply during the first two steps, then continues upward more slowly.",
"conclusion": "This modeled scenario ended more polarized than it began.",
"table": {
"caption": "Selected modeled polarization values",
"columns": ["Step", "Polarization index"],
"rows": [["0", "0.765"], ["14", "0.932"]]
}
}
},
{
"kind": "chart",
"assetId": "opinion-final-distribution-chart",
"alt": "Histogram showing one large cluster and several smaller clusters in the final modeled opinions.",
"caption": "The final modeled opinions form one dominant cluster and several smaller groups.",
"chart": {
"variables": "Horizontal axis: final modeled opinion. Vertical axis: frequency.",
"trend": "Most modeled opinions cluster near one end of the range, with several smaller groups separated from it.",
"conclusion": "This simulated scenario ended with an uneven distribution rather than a single uniform group."
}
}
]
}
],
"additional": [
{
"id": "private-game-prototype",
"title": "Private game prototype",
"visibility": "private",
"maturity": "prototype",
"summary": "A private three-week prototype built to test a compact gameplay loop under a deliberately small scope.",
"problem": "Test a game concept quickly while keeping the scope deliberately small.",
"contribution": "Built and iterated on the prototype during a three-week development window.",
"technicalDecisions": [
"Focused the work on a short gameplay loop rather than a full production release."
],
"outcome": "No real title, link, video, or identifying media.",
"assetIds": []
},
{
"id": "private-healthcare-platform",
"title": "Private healthcare platform",
"visibility": "private",
"maturity": "active",
"summary": "A confidentiality-safe summary of Luca's web-interface contribution.",
"problem": "A healthcare workflow needed a focused web-based interface.",
"contribution": "Contributed to the private platform's web-interface experience.",
"technicalDecisions": [
"Keeps product details and any identifying interface data outside the public portfolio."
],
"outcome": "No product identity, private link, screenshot, or health data.",
"assetIds": []
},
{
"id": "currency-converter",
"title": "Currency Converter",
"visibility": "public",
"maturity": "learning",
"summary": "A scoped .NET/Avalonia desktop project integrating external exchange-rate data and practicing typed UI development.",
"problem": "Practice a focused desktop workflow for currency conversion with external exchange-rate data.",
"contribution": "Implemented the application as a scoped learning exercise.",
"technicalDecisions": ["Uses .NET and Avalonia to explore a typed desktop interface."],
"outcome": "A scoped project for developing desktop application fundamentals.",
"url": "https://github.com/LucaPisl/CurrencyConverterAvalonia",
"assetIds": ["currency-converter-interface"],
"mediaLayout": "single",
"media": [
{
"kind": "image",
"assetId": "currency-converter-interface",
"alt": "Currency conversion interface with source and destination currency lists, a conversion date, and calculated results.",
"caption": "A focused Avalonia desktop workflow for selecting currencies and reviewing conversion results.",
"longDescription": "The interface lets a user choose one source currency, select multiple destination currencies, set a conversion date, and review the resulting values."
}
]
},
{
"id": "linux-modding-guide",
"title": "Linux Modding Guide",
"visibility": "public",
"maturity": "active",
"summary": "Ongoing community documentation focused on practical Linux troubleshooting and reusable technical explanations.",
"problem": "Useful Linux troubleshooting knowledge benefits from clear, reusable documentation.",
"contribution": "Wrote and maintained community-facing technical guidance.",
"technicalDecisions": [
"Favors practical explanations that help readers understand and resolve issues."
],
"outcome": "An ongoing example of practical technical writing.",
"url": "https://github.com/LucaPisl/LinuxModdingGuide",
"assetIds": []
}
]
},
"toolkit": [
{
"title": "Systems and delivery",
"technologies": [
{ "name": "Linux" },
{ "name": "Docker" },
{ "name": "Nginx" },
{ "name": "cPanel" },
{ "name": "DNS" },
{ "name": "TLS" },
{ "name": "Authelia" },
{ "name": "Fail2Ban" },
{ "name": "Btrfs" },
{ "name": "rsync" },
{ "name": "Nextcloud" },
{ "name": "Proxmox/KVM" },
{ "name": "Git" }
]
},
{
"title": "Applications",
"technologies": [
{ "name": "Python" },
{ "name": "TypeScript/JavaScript" },
{ "name": "Vue.js" },
{ "name": "Flutter/Dart" },
{ "name": "Fastify" },
{ "name": "C#/.NET" },
{ "name": "Java" },
{ "name": "Headless WordPress" }
]
},
{
"title": "Data and storage",
"technologies": [
{ "name": "PostgreSQL" },
{ "name": "SQL" },
{ "name": "Drift/SQLite" },
{ "name": "Drizzle ORM" },
{ "name": "SPSS" },
{ "name": "Microsoft Excel" }
]
},
{
"title": "Machine learning",
"technologies": [
{ "name": "PyTorch" },
{ "name": "Ultralytics/YOLO" },
{ "name": "OpenCV" },
{ "name": "SoccerNet" }
]
}
],
"contact": {
"introduction": "I’m open to System Administrator and Full-Stack Developer opportunities in Bucharest, including on-site, hybrid, and remote work, as well as international remote roles.",
"email": "luca.pislaru@gmail.com",
"social": [
{ "service": "GitHub", "url": "https://github.com/LucaPisl" },
{ "service": "GitLab", "url": "https://gitlab.com/luca_pisl" },
{ "service": "LinkedIn", "url": "https://linkedin.com/in/luca-pisl" }
],
"cvMessage": "For a current CV or role-specific information, contact me directly."
},
"metadata": {
"title": "Luca Pîslaru — System Administrator & Full-Stack Developer",
"description": "Portfolio of Luca Pîslaru, a Bucharest-based System Administrator and Full-Stack Developer working across Linux infrastructure and end-to-end software delivery.",
"socialPreviewAssetId": "social-preview-nightdrive"
},
"soundtrack": {
"intro": {
"opusAssetId": "soundtrack-intro-opus",
"mp3AssetId": "soundtrack-intro-mp3"
},
"main": {
"opusAssetId": "soundtrack-main-opus",
"mp3AssetId": "soundtrack-main-mp3"
},
"afterglow": {
"opusAssetId": "soundtrack-afterglow-opus",
"mp3AssetId": "soundtrack-afterglow-mp3"
},
"driveLift": {
"opusAssetId": "soundtrack-drive-lift-opus",
"mp3AssetId": "soundtrack-drive-lift-mp3"
}
},
"sceneDescription": "A restrained retro-futuristic night drive supports the reading journey while the portfolio content remains fully available as a semantic document."
}