Yosmany Garcia

yosmanyga [at] gmail.com

Las Vegas, NV

Software craftsman and open source lover, with experience in web and mobile development using leading edge technologies.

Central University of Las Villas, Cuba

Bachelor of Computer Science.


Skills

Present:

Past:


Portfolio

The Fortress logo

The Fortress: Inside The Beast's guts

A Role Played Game (RPG) as a text adventure.

"You are common mortal who has received a letter which states you've been chosen to infiltrate The Fortress and kill the Beast, a mysterious and fearsome creature."

It's based on the original MS-DOS version, by Miguel Cepero from Merchise Group, Central University of Las Villas, in the nineties. It was a very popular game in Cuba.

Web development stack:

  • The API was built with PHP.
  • The database used was MongoDB.
  • The development followed Behavior-driven approach using Behat.
  • The security was implemented using JSON Web Token (RFC 7519).
  • Received help for bored stuff from GitHub Copilot and Chat GPT.
  • The frontend was implemented using Typescript.
  • The framework used was React.
  • The state management was implemented using Mobx.
  • The architecture design was done object-oriented, with a service container, using Inversify.
  • The navigation was implemented using React Router.
  • The styling was implemented using Styled-components as CSS-in-JS solution.
  • The unit testing was implemented using Jest.
  • The playground used for UI components was Storybook.

Mobile development stack:

  • All the business logic from the web version, was reused for the mobile, such as state classes, API, and UI components as well.
  • The framework used was React Native
  • Expo was used as the toolkit around React Native
  • The styling was implemented using Styled-components Native
  • The navigation was implemented using React Navigation.

Web Trailer:

Mobile Trailer:

Phpiezas logo

Phpiezas

A suite of 104 single-responsibility PHP libraries: a compiled, annotation-driven service container, resource loading, authentication, JWT, MongoDB, phone/SMS and more. Each lib does one thing and composes through Composer.

assertConstant-time string equality assertion preventing timing attacks
attemptRate-limited attempt tracking against named actions and subjects via MongoDB
auditAudit execution interface with a delegator pipeline over multiple audit services
authenticationAuthentication orchestration with pluggable executors and pre/post listener hooks
authentication-attemptRate-limits authentication attempts and clears counters on success
authentication-with-codeCode-based authentication strategy using one-time code generation and validation
authentication-with-passwordPassword-based authentication strategy for user login
authentication-with-smsSMS authentication guard that blocks VoIP phone numbers
chatMongoDB-backed chat message storage and indexing per conversation
collection-purgeContract and delegator for purging named data collections
compileIn-place Mustache and Twig template rendering for code generation
consoleConsole I/O abstraction for CLI apps via stdin and stderr
countryCountry value objects with ISO code, name, phone, and currency
credential-as-cookieIssues and clears JWT-bearing Authorization cookies as PSR-7 responses
credential-as-objectBuilds JWT-based user credentials as serializable value objects
cronCron schedule parsing, due-checking, and minute-tick dispatching
datetimeImmutable datetime value object with explicit time arithmetic
deviceServer-side user device tracking backed by MongoDB
dockerThin PHP abstraction over docker compose and docker network invocations
email-messageEmail sending abstraction supporting multiple transports
encodeEncoding and salt-generation abstractions for hashing strings
errorError reporting interface with Sentry and no-op implementations
eventMongoDB-backed event logging and querying with label and date filtering
familyHouse and membership management with invitation-driven onboarding
feedbackStorage-backed feature-request system with vote ledger management
filesystemLocal and adapter-backed filesystem operations for PHP projects
genGenerators for IDs, tokens, passwords, codes, and UUID v7 values
healthHealth-check HTTP route returning service liveness status
httpThin Guzzle HTTP client abstraction with observer hooks
immichPHP client for the Immich API with auth and user admin services
instantiationReflection-based dynamic class instantiation and method invocation
io-for-cliAbstracts CLI input and output using the Aura CLI library
io-for-httpAbstracts HTTP request and response handling via PSR-7 and Laminas
jwtHMAC-SHA256 JWT creation and verification wrapping lcobucci/jwt
logPSR-3-shaped logging contract with stderr, fake, and delegator drivers
markdownRound-trip Markdown parser and dumper using nested PHP arrays
mongoThin opinionated MongoDB driver layer with uniform collection API
mongo-aggregationMongoDB aggregation pipeline helpers and grouping by day or month
multilingual-valueLanguage-keyed value object with BSON and JSON serialization
pathFilesystem path utilities for canonicalization and containment checks
payloadEncode and decode signed JWT payloads using HMAC-SHA256 with single-use keys
phonePhone number value object with MongoDB BSON, JSON serialization and formatting
phone-carrierResolve and persist mobile carrier records from phone numbers via MongoDB
phone-normalizationNormalise raw phone-number strings into canonical E.164 form via libphonenumber
phone-smsAbstract SMS contract and text sanitization utilities for the phpiezas suite
phone-sms-with-telnyxTelnyx-backed SMS driver that sends messages via the Telnyx REST API
phone-sms-with-twilioTwilio-backed SMS driver that sends messages via the Twilio REST API
playbookResolve Ansible module dependencies and produce a topologically sorted playbook list
profile-for-emailEmail profile data and MongoDB persistence for the phpiezas profile family
profile-for-facebookFacebook OAuth profile storage and retrieval for the phpiezas profile family
profile-for-passwordMongoDB-backed password profile store with salted hashing
profile-for-phoneMongoDB-backed phone-number profile store for users
profile-for-privilegeMongoDB-backed role-assignment profile store for users
profile-for-stripeMongoDB-backed Stripe customer profile store per user
redisThin PHP abstraction over ext-redis list operations with JSON
registrationRegistration orchestrator that dispatches to listener services
registration-for-profile-for-emailRegistration listener that creates the email profile on signup
registration-for-profile-for-passwordRegistration listener that creates the password profile on signup
registration-for-profile-for-phoneRegistration listener that creates a user's phone profile
registration-for-profile-for-privilegeRegistration listener that creates a user's privilege profile
relateUser relationship resolution through recursive delegation
resourceCore interfaces and delegators for building and reading resources
resource-as-composer-dirsResource loader for Composer autoload directories discovery
resource-as-composer-filesResource loader for files found in Composer autoload directories
resource-as-composer-files-with-annotationResource loader combining Composer file discovery with annotation parsing
resource-as-dataResource loader for inline data arrays passed directly as metadata
resource-as-doubleCombines two resource readers into a nested iteration chain
resource-as-double-as-file-with-annotationBuilds a file-with-annotation resource from double-resource metadata
resource-as-fileBuilds a single-file resource with base-directory path validation
resource-as-file-with-annotationExtends file resources with PHP AST parsing to extract docblock annotations
resource-as-file-with-envLoads resources from .env files with environment-variable substitution
resource-as-file-with-phpLoads resources from PHP files that return data arrays
resource-as-file-with-yamlLoads resources from YAML files using the Symfony YAML parser
resource-as-filesScans a directory for files using configurable glob and depth filters
resource-as-files-with-annotationScans a directory and extracts annotations from each PHP file
resource-as-noopNo-operation resource fallback that accepts any metadata and yields nothing
service-as-aliasService alias support for the symsonte service container
service-as-alias-from-externalExternal service alias support for the symsonte service container
service-as-commonCore service container with declaration query, instantiation, compilation, and resolution orchestration
service-as-customCustom-typed method argument support for the symsonte service container
service-as-envEnvironment variable method argument support for the symsonte service container
service-as-lazyLazy-loaded service support via ProxyManager for the symsonte service container
service-as-noopNoop method argument support for the symsonte service container
service-as-nullNull-typed method argument support for the symsonte service container
service-as-objectObject-typed method argument support for the symsonte service container
service-as-parameterParameter-typed method argument support for the symsonte service container
service-as-pioneerThree-phase bootstrap that hard-wires the symsonte service container, depends on every satellite
service-as-privatePrivate service support (parent-only access) for the symsonte service container
service-as-scalarScalar (literal) method argument support for the symsonte service container
service-as-serviceService-typed method argument support for the symsonte service container
service-as-tagged-serviceTagged-service method argument support for the symsonte service container
service-declarationDeclares services with constructor arguments and method calls
service-from-composerService declaration collection from composer.json autoload paths for the symsonte service container
service-kitMetapackage that aggregates the full Phpiezas service container: foundation, all method-argument satellites, lazy proxies, alias, env, parameter, tagged services, composer-driven collection, and the pioneer bootstrap
service-resolutionPSR-11 service container resolution with typed errors and delegator chaining
sessionSession management backed by MongoDB with device-graph traversal
syncData synchronization layer backed by MongoDB and filesystem storage
testTesting support for integration tests wired as Symsonte DI services
traefikPoll the Traefik API until a given service becomes available
uniquenessSequential ID generation and storage for user uniqueness records
upgradeSequential migration runner backed by MongoDB for database upgrades
verification-codeManages one-time verification codes stored in MongoDB
verification-processOrchestrates a two-step verification flow with hook extension points
webhookHTTP webhook dispatcher with pluggable listener services

For more details see full documentation.

Symsonte logo

Symsonte

A PHP framework built on the phpiezas libraries. Design the business logic as plain PHP first, frame it second: the class is the controller, and annotations expose a method over HTTP or CLI. The 11 packages below cover the kernel, routing, controllers, authorization and the HTTP/CLI apps.

app-for-cliOrchestrates CLI application execution via route matching and dispatch
app-for-httpOrchestrates HTTP application execution with lifecycle listener hooks
authorizationDeclares and stores role-based authorization rules for class methods
behat-extensionIntegrates the Symsonte service container into Behat feature tests
controllerDeclares and executes controller methods through a listener-driven pipeline
frameworkMetapackage aggregating the Symsonte kernel, HTTP listeners, and core DI/routing components
http-kitHTTP framework listeners: CORS, JSON, JWT auth, and controller argument resolution
kernelSymsonte kernel: application bootstrap, DI container setup, and HTTP/CLI route-resolution delegation
routingCore abstractions for route declarations, resolution, and storage
routing-for-cliDeclares and resolves CLI routes based on command-line arguments
routing-for-httpDeclares and resolves HTTP routes using FastRoute with PSR-7 matching

For more details see full documentation.

Typescrito logo

Typescrito

A suite of 90 single-responsibility TypeScript libraries for building React web and React Native mobile apps from one codebase: 65 headless tools (Inversify DI, SQLite storage and sync, credentials, i18n, platform abstractions with web and mobile drivers) plus 25 Tamagui UI components. Each lib does one thing and composes through npm.

anchorTamagui link component that renders a real anchor on web and opens via Linking on native
auth-as-frontFront-end auth flows (email, phone, Facebook, guest) with DI-wired controllers and views
barcodeBarcode scanner and renderer components for EAN-13 and Code 128 barcodes
barcode-encodeEncodes barcode data into bar sequences for EAN-13 and Code 128B formats
button-with-progressTamagui button that overlays a spinner and dims its label during an async action
config-contextReact context and DI singleton for key/value app config backed by secure storage
country-codeISO 3166-1 alpha-2 country code lookup and filtering utilities
credential-as-abstractShared credential contract for authentication token storage
credential-contextReact context that distributes credential state to the component tree
credential-for-mobileReact Native implementation of the credential store
credential-for-webBrowser implementation of the credential store interface
data-syncBidirectional query sync between a local SQLite store and a remote server
data-sync-awareReact/MobX app-shell wrapper that drives the bidirectional data-sync handshake
device-awareReact/MobX app-shell component that registers and persists a unique device id
device-identifier-as-abstractShared contract for retrieving a unique device identifier
device-identifier-for-mobileCollects hardware, OS, app, cellular, and network fingerprint data from a React Native device
device-identifier-for-webBrowser implementation of the device-identifier interface
diReact-aware dependency injection powered by Inversify
dispatcherKeyed service registry for collecting and retrieving tagged DI services
document-picker-as-abstractShared contracts for launching a platform document picker
document-picker-for-mobileReact Native implementation of the document-picker abstraction
document-picker-for-webBrowser implementation of the document-picker interface
encoderBase64 encoding as an injectable service for Node.js
export-dataCollect, zip, and restore application data across sessions
family-dataHTTP client layer for the family-house feature: invitations, membership, and household state
feedback-dataDI-wired data-access services for the feedback domain
feedback-uiDI-wired UI for submitting and listing user feedback requests with MobX controllers
fetchThin, typed HTTP client base built on ky
file-system-as-abstractPlatform-agnostic file system contract for TypeScript applications
file-system-for-mobileReact Native file system implementation backed by expo-file-system
file-system-for-webBrowser file system implementation backed by localforage
flag-from-localResolves a country code to its SVG flag markup from a bundled local dataset
flag-from-remoteResolves a country code to its flag image as a base64 data-URI from a bundled asset set
formTamagui form field wrapper combining a label, input slot, and inline error message
iconTamagui icon renderer that resolves semantic size tokens and theme color tokens
icon-as-dynamicLazy-loading icon wrapper that resolves glyphs by name from a React context registry
icon-contextReact context for distributing an icon set to any component in the tree
id-generator-as-abstractContract and test double for unique-ID generation
id-generator-for-mobileReact Native implementation of the id-generator interface
id-generator-for-webBrowser implementation of the id-generator interface
image-compressor-as-abstractShared interface and DI base for image compression
image-compressor-for-mobileReact Native image compression backed by react-native-compressor
image-compressor-for-webBrowser-side image compression via the compressorjs library
input-for-searchComposable Tamagui search bar row with slotted input, leading icon, and clear button
intlThin re-export layer over react-intl for consistent i18n
kvSQLite-backed key-value store with DI wiring
language-contextReact context that tracks and persists the active UI locale
language-detector-as-abstractShared contract for detecting the user's preferred language from a priority list
language-detector-for-mobileReact Native implementation of the language detector abstraction
language-detector-for-webBrowser-based language detection backed by the browser-lang package
layout-for-mobileFull-screen React Native layout with pinned header, footer, and keyboard avoidance
layout-for-webFull-screen web layout with pinned header, footer, scrollable body, and stick-to-bottom
list-with-searchPaginated, searchable list with multi-select and batch actions driven by MobX
markdownTamagui-styled Markdown renderer with composable, overridable styled primitives
membership-dataFetches the authenticated user's membership state from the API
meta-formDynamic add/edit form generated from metadata field definitions, with MobX controllers
metadata-with-sqliteSQLite-backed persistence for a two-tier metadata model (class schema + object instances)
migrationSQLite schema migration runner for DI-wired applications
migration-awareReact/MobX app-shell wrapper that runs pending SQLite schema migrations on mount
network-contextReact context that exposes real-time internet connectivity to the component tree
network-monitor-as-abstractShared contract for querying network reachability and online state
network-monitor-for-mobileReact Native implementation of the network monitoring abstraction
network-monitor-for-webBrowser implementation of the network-monitor family
phoneParse, validate, and normalize mobile phone numbers across countries
photosPhoto capture, compression, reorder, and gallery view components with MobX controllers
picker-for-countrySearchable country picker with flag emoji and diacritic-normalized filtering
picker-for-iconLucide icon search picker backed by a FlexSearch index with a MobX controller
picker-for-tagsTag input with autocomplete suggestions and view/filter/edit modes driven by MobX
resourceContract for asynchronous resource loading by path
secure-storage-as-abstractShared contract for encrypted key-value storage across platforms
secure-storage-for-mobileReact Native secure storage backed by expo-secure-store
secure-storage-for-webBrowser secure storage backed by secure-ls for AES-encrypted localStorage
select-as-nestedSelect that renders a flat option list indented by tree depth, with a native sheet
share-manager-as-abstractShared contract for triggering the OS-level share sheet across platforms
share-manager-for-mobileReact Native share-sheet implementation backed by expo-sharing
share-manager-for-webBrowser share-sheet implementation using the Web Share API
sheet-actionFull-width Tamagui sheet action button with optional icon and themed intent
sqlite-as-abstractShared SQLite contracts for the typescrito family
sqlite-for-mobileReact Native SQLite implementation backed by expo-sqlite
sqlite-for-webWeb SQLite implementation backed by sql.js (SQLite compiled to WebAssembly)
tableDI-integrated orchestrators for SQLite table lifecycle operations
tables-awareReact/MobX app-shell wrapper that bootstraps the local SQLite schema on mount
tamagui-with-theme-as-defaultBase Tamagui design tokens, theme factories, fonts, shadows, and palette utilities
tamagui-with-theme-for-retrouiNeobrutalist Tamagui config: black borders, hard shadows, and sharp corners
text-as-i18nTamagui text that resolves its children as a react-intl message ID with interpolations
text-as-jsonTamagui text component that pretty-prints a JSON object in a monospace pre block
toastTamagui toast provider with a bottom-anchored viewport and native system toast delegation
treeUtilities for sorting and querying parent-child node hierarchies
uniqueness-backendDI-wired controller and view for listing uniqueness records fetched from a remote API
zipBuild and write zip archives to the file system via a DI-friendly service

For more details see full documentation.