TL;DR: Jump to More Readable Readme or to Contact Me
I'm trying to write clean and safe code.
// profile.ts
// Discriminating unions are a powerful pattern
type Activity =
  | {
      status: "procrastinating";
    }
  | {
      status: "learning";
      what: string | string[];
    };
// Interface
interface Profile {
  firstName: string;
  activity: Activity;
}
// Fully typed function
/** Fight with heterogenous types of return */
const currentActivity = (
  motivation: number,
  what: string | string[] = "[un]important stuffs"
): Activity => {
  return Math.random() > motivation
    ? { status: "procrastinating" }
    : { status: "learning", what: what };
};
// Config Me
const motivation = Math.random(); // let's not be too specific
const currentInterests = ["Remix", "vitest"];
// Typed Me
const me: Profile = {
  firstName: "Marc", //π πΎ
  activity: currentActivity(motivation, currentInterests),
};
// Backend Me (IA will never beat this one)
/** Mock a server route */
const thinking = async (question: string): Promise<string> => {
  try {
    if (!question || typeof question !== "string" || question === "42?") {
      throw new Error("422: Haha!"); //unprocessable content
    }
    const answer = "42";
    return new Promise((resolve) => {
      setTimeout(() => {
        resolve(answer);
      }, 3000);
    });
  } catch (error: unknown) {
    // this block might need improvement (typing error is tricky)
    if (error instanceof Error && error.message) throw error; //rethrow
    else throw new Error("500: Brain crash :/", { cause: error });
  }
};
// Frontend interaction with Me
/** Mock a fetch */
export const askMeAnything = async (
  question: string = "What's the meaning of life?"
): Promise<string | void> => {
  try {
    if (!question || typeof question !== "string") {
      return "Hmm... It doesn't look like a question...";
    }
    const answer = await thinking(question);
    return answer;
  } catch (error: unknown) {
    // this block might need improvement (typing error is tricky)
    if (error instanceof Error && error.message) throw error; //rethrow
    else throw new Error("You found a bug! Please tell me!", { cause: error });
  }
};
// Frontend Me
export default me;Hello world:
// main.ts
import me, { askMeAnything } from "./profile";
(async () => {
  console.info("Hi π");
  try {
    const answer = await askMeAnything("6*7");
    console.info(`${me.firstName} says: ${answer}`);
  } catch (error: unknown) {
    if (error instanceof Error) {
      console.log(error.message);
    }
  }
  console.info("See you later, Alligator π");
})();Hi π, I'm Marc,
Here I'm still studying, now learning fullstack development, web & mobile.
// TODO: landing page and/or portfolio- Languages: HTML5, CSS and javascript/typescript (I learnt Python in another life, but right now I'm into JS/TS for backend too)
 - Frontend libs: React, React Router
 - Fullstack frameworks: I'm into Remix right now
 - Pretty stuffs: I'm a little bit versatile with this subject: plain CSS, TailwindCSS, classless or minimalistic CSS approches...
 - ODM/ORM: mongoose, Prisma, BaaS
 - Backend: (Remix), Express, BaaS
 - DevOps: I'm fine with simple deployment, CI/CD concepts, but this is not something I'm fluent with in a production environment where you cannot mess with migrations, security...
 - Mobile: React Native
 - UX/UI: some knowledge of concepts and some knowledge of Figma
 
- sharpen my skills with the already mentionned tech;
 - get a better workflow and get better at choosing and leveraging the right tools (frameworks, 3rd-party libs or services... ); and at focusing my learning and expertise on these...
 - get better at testing: Vitest, cypress;
 - maybe a UI library
 - maybe Storybook;
 - maybe a headless-CMS
 
I've also got a statistical background and a solid experience with R. Even though I've recently been spending more time on web development, you may be here because of that... Want to talk about causality, misconceptions about p-values or confidence intervals, or the Tidyverse?
Feel free to contact me the way you want:
- Use the following form: Get in Touch
 - Post an issue
 - Find my e-mail around here if you're a 
gitninja 
