How to Integrate MS-Clarity in AMP Pages in 2024?

I have developed a website entirely using Accelerated Mobile Pages (AMP).

I recently discovered Microsoft Clarity, but their installation instructions do not cover AMP, even for manual installation.

I tried integrating the JavaScript code provided for manual installation by simply pasting it into the header.

It appears to work in the Clarity interface, but several severe errors are reported by AMP validation tools, including Google Search Console. As a result, my pages are not being served by the AMP cache provided by Google’s proxy-based content delivery network (CDN).

Has anyone else encountered this issue and found a workaround to implement Clarity on AMP without errors?

GET http://localhost:3000/node_modules/mathjs net::ERR_ABORTED 404 (Not Found)

I tried to link mathjs to my script but got this error:

GET http://localhost:3000/node_modules/mathjs net::ERR_ABORTED 404 (Not Found)

I use local node server

Server code:

const http = require("http");
const fs = require("fs");
   
http.createServer(function(request, response){
       
    let filePath = request.url.substring(1);
    if(filePath == "") filePath = "index.html"; 
    fs.readFile(filePath, function(error, data){
               
        if(error){
            response.statusCode = 404;
            response.end("Resourse not found!");
        }   
        else{
            if(filePath.endsWith(".js")) response.setHeader("Content-Type", "text/javascript");
            response.end(data);
        }
    });
}).listen(3000, function(){
    console.log("Server started at 3000");
});

My project strucutre:

Project structure

I tried to correct path, but this didn’t help (path was correct?)
import {evaluate} from './node_modules/mathjs';

WebSocket video streaming automatically adjusts quality based on the user’s network status

I have three sources for my WebSocket video streaming, and I’m using JMuxer to display the video in the client’s web browser. I need to implement automatic quality adjustment based on network status. For example, if the current stream is at 1080p but the client’s network slows down, it should automatically switch to the 720p source.

The available streaming endpoints are:

  • /video?quality=360p
  • /video?quality=720p
  • /video?quality=1080p

I’m aware of the Network Information API, but I want a solution that directly adapts the video quality based on the client’s ability to handle the current data stream.

VSC not intelisense for MUI – worked before

I have VSCode and after some day ago stoped working intelisense for MUI component and my own functions in files. I have isntaled @mui/material, but when I write <but I haven’t aby sugestion about from MUI. I know that is extension ‘mui’ for MUI snippets, but intelisense worked without this extension.

enter image description here

I created fresh NextJS (npx create-next-app) and installed MUI (npm install @mui/material @emotion/react @emotion/styled).

I don’t know if it matters, but the problem started when I started switching from JavaScript to TypeScript.I don’t know if it matters, but the problem started when I started moving from javascript to typescript. I’ve now created a JavaScript project in NextJS because the completion worked, and now it doesn’t work

I have project on sever with Ubuntu.

Any sugestions?

VSCode:

Version: 1.95.1 (system setup)
Commit: 65edc4939843c90c34d61f4ce11704f09d3e5cb6
Date: 2024-10-31T05:14:54.222Z
Electron: 32.2.1
ElectronBuildId: 10427718
Chromium: 128.0.6613.186
Node.js: 20.18.0
V8: 12.8.374.38-electron.0
OS: Windows_NT x64 10.0.22631

DOMPurify – how to keep (sub)strong tags included in a deleted(unwanted) span tag?

I use DOMPurify library (https://github.com/cure53/DOMPurify) to clean up html code copied from google docs.

I would like to remove the span tags from the copied text but keep the text inside the tags as well as any strong tags included in the deleted span tags.

I manage to remove the span tags while keeping the text inside the tags but any strong tags are also removed.

Example

DOMPurify.sanitize("<p>
<span style="background-color:transparent;color:#000000;"><strong>Some strong text</strong></span>
</p>", {
    ALLOWED_TAGS: ['p','strong']
})

Output

<p>Some strong text</p>

Expected output

<p><strong>Some strong text</strong></p>

I also tried with this kind of hook

DOMPurify.addHook("afterSanitizeAttributes", function (node, data, config) {
  if (node.nodeName === "SPAN") {
    node.replaceWith(node.textContent ?? "");
  }
});

But the output is the same, <strong> tags inside <span> are also deleted.

Can you please help me to keep (sub) <strong> tags after “sanitize”?

Many thanks

GoogleMaps GeoLocation returning inconsistent results

I am getting two results when I run the below code. Note how the Lat/Long are different.

  1. Why am I getting two different results?
  2. Why are both results actually wrong? I live 3km away from 28 Dean Ave, Barrie, ON L4N 0C4, Canada.

Thank you.

Lat/Long

Lat/Long

window.getGeolocationAndAddress = function () {
    const apiKey = 'MY GoogleMaps API Key';

    return new Promise((resolve, reject) => {
        if (navigator.geolocation) {
            navigator.geolocation.getCurrentPosition(async (position) => {
                const latitude = position.coords.latitude;
                const longitude = position.coords.longitude;

                // Try to get address
                const geocodeUrl = `https://maps.googleapis.com/maps/api/geocode/json?latlng=${latitude},${longitude}&key=${apiKey}`;

                try {
                    const response = await fetch(geocodeUrl);
                    const data = await response.json();
                    const address = (data.status === "OK" && data.results.length > 0)
                        ? data.results[0].formatted_address
                        : null;

                    resolve({
                        latitude,
                        longitude,
                        address
                    });
                } catch (error) {
                    // If address lookup fails, still return coordinates
                    resolve({
                        latitude,
                        longitude,
                        address: null
                    });
                }
            }, (error) => {
                reject(error.message);
            });
        } else {
            reject('Geolocation is not supported by this browser.');
        }
    });
};

Why is my CSV parsing become much slower after I added a cast function in JavaScript?

I am using csv-parse to handle a very large dataset (about 30M rows with about a dozen columns). The processing I previous did was just to stream it, replace some of the values by other values, and write it out. It took about half an hour to process the file.

I have just added a new feature into the pipeline, which needs to change the content for some (a small minority) rows in the context of other rows, which means I have to do it in the 2 passes: to read it once to load the data I need, to read it the second time and write the modified content. Therefore I expected it would take about an hour to complete.

As the object model includes number which I need to compare, I added a cast function in the option field of parse function in the csv-parse library and use the Number() function there. As part of the refactoring to eliminate undefined / '' confusion (the data model considers empty string a missing value, rather than a valid value), I modified the code to add a cast function to change '' to undefined as well when streaming every other CSVs. The cast function is just below:

function changeEmptyStringToUndefined(x : string) {
    return x === '' ? undefined : x;
}

And the parser is created below:

parse(inputStream, {columns: true, cast: changeEmptyStringToUndefined});

Just by specifying the cast function, the processing time of my other CSVs had doubled even without other changes!

What’s the reason that using a cast function made it so slow in processing the CSV? In addition, if I wanted to change the program to only parse the large file once, how much memory would I need to store the complete, parsed content of a 3 GB CSV file with 30M rows, about 10 columns with 10 characters each?

Referencing another function and weird booleans in javascript for rpgmaker MZ

I’m learning Javascript by using it in the context I want it for, rpg maker MZ, to slightly override it’s error handling. It would essentially tell the engine to more or less skip playing the missing audio file, and to display a custom error message.

I’m having two issues.

  • I think I’m potentially referencing the original function incorrectly because it doesn’t appear to be functioning entirely. It’s functioning enough to know that the file is missing, but it no longer seems to be recognizing the file is there even when it’s put back into place.

  • I’m having an issue with a boolean returning true, when I want it returning false be default.

I’ve managed to get pretty far with it using google, documentation, and combing through other plugins to see how they work, but on this I’m stuck. I’m not exactly sure what it is I’m missing.

Here is what I have for the plugin so far.

/*:
@target MZ
@plugindesc V1 MissingFileSkipper
@author Quizicalgin
@url 
@help 

@param Missing Error Message
@type string
@default "%s could not be found. Please contact the dev at (your url here)."
@desc Error message if a file is missing.

@param Show in Console?
@type boolean
@default false
@desc Error message is shown in the console instead
*/

// variable set up to prevent conflicts
var ftp = ftp ||{}

// Makes sure that the parameters set from the editable options will be used.
var parameters = PluginManager.parameters("FTP_MissingFileSkipper");

// Connects the parameters to the code that handles the errors and if it's going to use the console or not
var MissingError = parameters["Missing Error Message"];
var ConsoleMsg = parameters["Show in Console?"] === "false";

    
ftp.MissingFileSkipper = function () {
    
    // references the original audio functions so they can still be called
    AudioManager._OGPlaySe = AudioManager.playSe;   
    
    AudioManager.playSe = function (se) {
        if (this._isError = true) {
            showMissingError(se.name);          
        } 
        else {
            this._OGPlaySe(se.name);
        }
    };
        
    // Determines whether ther error shows up in console, or as a msgbox.
    showMissingError = function (filename) {
        const message = MissingError.replace("%s", filename);
        if (ConsoleMsg) {
            console.warn(message);
        }
        else {
            alert(message);
        }
    };  
    
};
// Calls the now defined function so that it's used in game.
ftp.MissingFileSkipper ();

-Trying to reference problem-
AudioManager._OGPlaySe = AudioManager.playSe; is supposed to reference the pre-existing function so that I can override, but still use the original function to play sound, in this case a sound effect.

The only other way I’ve tried to write it is const AudioManager._OGPlaySe = AudioManager.playSe; which resulted in a “Missing initializer in const declaration” error that I wasn’t able to figure a way around either, since it looks initialized to me, or at least that it should?

-Flipflopped boolean-
For the ConsoleMsg variable I have tried:

  • == “false”
  • === “false
  • == ‘false’
  • === ‘false’

and in the if arg for showMissingError I have tried:

  • ConsoleMsg == true
  • ConsoleMsg === true
  • ConsoleMsg == ‘true’
  • ConsoleMsg === ‘true’
  • ConsoleMsg == “true”
  • ConsoleMsg === “true”

It all still results in it being the inverse of what I would like it to be, which is false making it so it prints to an alert box, where true would make it use the console instead.

Extra details:

I was initially trying to run the error handing as try/catch, but it continued to default to the engine’s error message and opted to scrap the approach with my current limited knowledge set.

I had also tried to override the error handling functions for audio in the engine, but when looking at it in the console it kept showing that it was trying to play the file despite it not being there, and was counting up the attempts. Had to scrap that idea since I suspected it could result in some laggy gameplay if allowed to go on.

PowerApps Model Driven App: How to Prevent Reselecting Dropdown Options

I’m currently working on a PowerApps project where I have several dropdown lists (option sets) that should only allow users to select each team once. I want to prevent users from reselecting teams after they’ve been chosen. However, I’m running into a few issues.
Here’s a Snippet of My Code:

let selectedTeams = [];

// Codes pour les équipes


function onTeamChange(executionContext, fieldName) {

const formContext = executionContext.getFormContext();

const selectedValue = formContext.getAttribute(fieldName).getValue();

// Si une valeur a été désélectionnée

if (selectedValue === null) {

// Retirer l'élément désélectionné de selectedTeams``

selectedTeams = selectedTeams.filter(team => team !== fieldName);

formContext.ui.clearFormNotification("duplicateTeam");

return;

}

// Vérifie si l'équipe est déjà dans la liste des équipes sélectionnées.

if (selectedTeams.includes(selectedValue)) {

formContext.ui.setFormNotification("Cette équipe a déjà été choisie.", "ERROR", "duplicateTeam");

formContext.getAttribute(fieldName).setValue(null); // Réinitialise la sélection pour éviter le doublon.

} else {

formContext.ui.clearFormNotification("duplicateTeam");

selectedTeams.push(selectedValue); // Ajoute la nouvelle sélection dans selectedTeams`.`

}

// Met à jour les options des dropdowns

updateDropdownOptions(formContext);

}

function updateDropdownOptions(formContext) {

const allDropdowns = ["teamOptionSet1", "teamOptionSet2", "teamOptionSet3", "teamOptionSet4"]; // Noms des champs

allDropdowns.forEach(fieldName => {

const dropdown = formContext.getAttribute(fieldName);

const options = dropdown.getOptions(); // Récupère toutes les options de l'option set

// Réinitialise les options de l'option set

options.forEach(option => {

// Si l'option est dans la liste selectedTeams`, désactivez-la`

option.disabled = selectedTeams.includes(option.value);

});

// Met à jour le dropdown avec les options modifiées

// Note: Dans PowerApps, vous ne pouvez pas appeler setOptions. Vous devez le gérer par logique utilisateur.

});

}

I have a JavaScript function that runs on the onchange event for each dropdown. The goal is to check if a selected team has already been chosen and, if so, prevent re-selection.

I’m storing the selected values in an array, but I’m having trouble clearing options after a selection is made.

Issue I’m Facing: The items do not disappear from the dropdown list after selection.
Questions:
How can I modify my code to ensure that selected options are properly removed from the dropdown list?

Any insights, code examples, or pointers would be greatly appreciated! Thanks in advance for your help!

I’m storing the selected values in an array, but I’m having trouble clearing options after a selection is made.

Date is mostly one day off and inconsistent

So, in summary, I want my dates to work in uniform. Since we are dealing with just dates and not time, how exactly can I achieve this? I have tried many ways already.
In the frontend, I am using React calendar for date UI and dayjs for date formating. In backend, I am using dayjs for formating as well. I built a web app where users can create trips. These trips heavily relies on date for operations such as trip starts and end dates, payment due dates, booking deadline dates, etc.
Let me use trip start and end date for example. All I want is that when user A creates a trip and set the start and end date to be September 1 – September 10 and publish the trip. No matter where the person who wants to book the trip is located, he or she should see the same date that the owner of the trip set for the start and end.
What I have now is frustrating. A very good example is this:
I setup a trip with the following dates:
start date: September 1, 2025
end date: September 10, 2025

On the booking page, I am seeing August 31, 2025.

I read that I should treat everything as UTC and save my dates as UTC in the database. I have done that or let me say, I think that I have done that. Here are the codes that I have.
In the frontend which is built with Nextjs, I am using React calendar. So, I created a component to handle this.

 import Calendar from "react-calendar";
 import "react-calendar/dist/Calendar.css";

export function CustomDatePicker(dates, dateStateFunc){

//this is the p tag that shows the date as the user select the dates from the calendar.
<div>
  <p>
    {dates === null || dates === undefined || !dates ? "Select Date"
     : dayjs(dates).format("YYYY-MM-DD")}
  </p>
</div>
}



<Calendar
  value={dates === undefined || dates === null || !dates ? dayjs(new Date()).toDate()
   : dayjs(dates).utc()?.format()}
    onChange={(e) =>dateStateFunc(e)}
  />

In one of the components where I used the date component, I handled it this way:
//trip creation component

import { CustomDatePicker } from "../customDate/CustomDate.component";


//I tried creating utc date from the dates that came from React Calender

const createNewDate = (date: Date | string)=>{
 let fullDate: Date | string;
  const m = dayjs(date).utc().format();

  fullDate = m;

  return fullDate;
}

 const handleDepositeDate = (datePara: Date | string, eventType) => {
    const fullDate = createNewDate(datePara as Date);
    if (eventType === "start_date") {
      setTripData({ ...tripsData, startDate: fullDate });
    } else if (eventType === "end_date") {
      setTripData({ ...tripsData, endDate: fullDate });
    }
  };

export function CreateTrip(){
 <CustomDatePicker
   dates={tripsData?.startDate as string}
   dateStateFunc={handleDepositeDate}
  />
}

With the above codes, when I console.log(tripData.startDate, tripData.endDate), I get to see UTC date like this: 2024-08-31T23:00:00Z, 2024-09-09T23:00:00Z.

This means it is one day off. This is what gets sent to the backend which creates the same date that is short of one day.
In my backend, I simply recreated the date since I want to trust only the backend. I don’t know if this is right or wrong. In the app, most of the dates are created by the user. So, in backend, I simply take what they have created, and recreate it before saving to the database to be sure that the right date format is saved in the database. My backend is in node.js

I was told to always use UTC midnight.

export const convertDate = (date: Date | string) => {
  const converted = dayjs(date).utc().utcOffset(0).startOf("day").format(); 
  return converted;
};

The above code also generates this date using the frontend September 1, 2025 and September 10, 2025: 2024-08-31T00:00:00Z and 2024-09-09T00:00:00Z;

So, why is it not generating date as I expected it to? My computer currently is set to UTC+01:00 west central Africa.
To display the date back in frontend, I am still using dayjs to handle it.

export const convertDate = (params: {
  date: Date | string;
  isFortmat?: boolean;
}) => {
  const { date, isFortmat } = params;
  let converted: string = "";

  isFortmat
    ? (converted = dayjs(date).utc().format("MMM-DD-YYYY"))
    : (converted = dayjs(date).utc().format());

  return converted;
};

It is still one day off with the current above date example.

Javascript does not work well at the User end? [closed]

I made a game chess but when I test it on my end using admin login but when I play this game on another device it’s working very bad. I create it using Javascript, html and css. I use wp coder plugin for it. Anyone who help me about this. I will show code and the link of site.

As I describe first, everything is fine at the admin end but on the user end it is too bad.

Approach for handling `discriminatedUnion` with `superRefine` with Zod

Dynamic Validation Schema

  1. Base Schema: Create a base schema that contains common fields.

  2. Dynamic Validations:

  • Code: Implement dynamic validations based on the code field.
  • Flag: Use a flag passed as a parameter to determine if additional validations should be applied.
  1. Shared complex validations: Use superRefine in the base schema to maintain shared validation logic across all schemas.

Code example

type Codes = {
    One: 'one',
    Two: 'two',
}

const BaseSchema = z.object({
    code,
    // ... other common fields
}).superRefine((data, ctx) => {
    // Common complex validation logic
});

const One = z.object({
  email,
});
// ... more specific schemas like `Two`

const FlaggedSchema = z.object({
  dateOfBirth,
});

const createSchema = (code: Codes, isFlagged: boolean) => {
    const isOne = code === Codes.One
    const baseSchema = BaseSchema.extend({
        code: z.literal(code),
        ...(isOne ? One.shape : {}),
        ...(isFlagged ? FlaggedSchema.shape : {}),
    });

    return baseSchema;
};

export const createMapSchema = (isFlagged: boolean) => {
  const schemas = Object.values(Codes).map((code) =>
    createSchema(code, isFlagged),
  );
  const unions = z.discriminatedUnion('code', schemas);
  const map = z.record(z.array(unions));
  const schema = z.object({
    types: map,
  });
  return schema;
};

Problem

superRefine it cannot be applied to the base schema if you plan to use schema methods like merge afterward. This limitation arises because superRefine returns a Zod effect, which prevents further modifications to the schema.

so, how to apply common complex validations(refine or superRefine) in the base schema but also running dynamic validations depending schema fields or external data?

Aditional notes

I reviewed this question but I didn’t see anything to use with this specific case

Why does partial returns duplicate partial view on error

I have a .net MVC project that renders a partial view.

The button should append a a partial using jquery which is working, but the issue happens when i send the form.

enter image description here

code for appending the HTML:

function OnPpaContainerClick() {
  const ppaBtn = $(".add-ppa-btn");
  ppaBtn.off();

  ppaBtn.on("click", function (event) {
    event.preventDefault();

    const mfoContainer = $(this).parents(".mfo-container");
    const mfoIdx = mfoContainer.data("mfoidx");
    const ppaIdx = mfoContainer.children(".ppa-container").length;

    $(mfoContainer).append(CreatePpa(mfoIdx, ppaIdx));
  });
}

Partial parent:

@for (int i = 0; i < Model.Mfos.Count; i++)
  {

    ViewData["MfoIndex"] = i;
    <div class="custom-border-color mfo-container mt-2 border border-2 rounded" data-mfoidx="@i">
      <div class="p-2 pe-0 d-flex flex-row gap-2">
        @* <input type="hidden" name="Mfos[@i].Id" value="@(Model.Mfos[@i].Id)" /> *@

        <div class="form-floating form-group col-1 gap-2">
          <input style="height: 4rem" type="text" id="Mfos[@i].Title" name="Mfos[@i].Title" class="form-control"
            value="@(Model.Mfos[@i].Title)" />
          <label name="Mfos[@i].Title" class="control-label text-black">MFO No.</label>
        </div>

        <div class="form-floating form-group col-3 gap-2">
          <textarea style="height: 4rem" class="form-control" name="Mfos[@i].Description"
            value="@(Model.Mfos[@i].Description)"> </textarea>
          <label id="Mfos[@i].Description" name="Mfos[@i].Description" class="control-label text-black">
            Title</label>
        </div>

        <div class="my-auto">
          <button type="button" class="add-ppa-btn btn btn-primary">Add PPA</button>
        </div>
      </div>
      @for (int ppaIdx = 0; ppaIdx < Model.Mfos[i].Ppas.Count; ppaIdx++)
      {
        ViewData["ppaIdx"] = ppaIdx;
        <partial name="Shared/_Ppa" view-data="ViewData" />
      }
    </div>
  }

Partial Child

<div class="ppa-container">
  @for (int ppaIdx = 0; ppaIdx < @Model.Mfos[MfoIndex].Ppas.Count; ppaIdx++)
  {
    @ppaIdx
    <div class="ppa-case ps-2 pb-0 d-flex flex-row">
      @* <input type="hidden" name="Mfos[@MfoIndex].Ppas[@ppaIdx].Id" value="@(Model.Mfos[@MfoIndex].Ppas[@ppaIdx].Id)" />
    *@

      <div class="form-floating form-group col-2">
        <input style="height: 4rem" id="Mfos[@MfoIndex].Ppas[@ppaIdx].Title" name="Mfos[@MfoIndex].Ppas[@ppaIdx].Title"
          class="form-control border-bottom-0 border-end-0 rounded-0 pe-0"
          value="@Model.Mfos[@MfoIndex].Ppas[@ppaIdx].Title" />
        <label name="Mfos[@MfoIndex].Ppas[@ppaIdx].Title" class="control-label text-black">PPA No.</label>
      </div>

      <div class="form-floating form-group col-3">
        <textarea style="height: 4rem" class="form-control border-bottom-0 rounded-0"
          name="Mfos[@MfoIndex].Ppas[@ppaIdx].Description"
          value="@Model.Mfos[@MfoIndex].Ppas[@ppaIdx].Description"> </textarea>
        <label id="Mfos[@MfoIndex].Ppas[@ppaIdx].Description" name="Mfos[@MfoIndex].Ppas[@ppaIdx].Description"
          class="control-label text-black">
          Title
        </label>
      </div>
    </div>
  }
</div>

Create controller:

 public async Task<ActionResult> Create(OpcrVM model)
  {
    if (ModelState.IsValid)
    {
      await _opcrService.Create(model);
      return RedirectToAction(nameof(Index));
    }
    ViewData["UserSelectList"] = await GetUserSelectList();
    ViewData["TimelinessOptions"] = GenerateTimelinessOptions();

    return View(model);
  }

I also check the model if the data gets duplicated but its not.

I also check the http request sent on the browser its correct except for the response. It renders the duplicate.

Browser request:

browser request

Browser response:

browser response

Can javascript have race condition?

For the following code in javascript I want to know if there are concurrent api requests to increment count is there any possibility of a race condition considering the fact that javascript is single threaded.

  app.post('/increment', async (req, res) => {
    await someAsyncFunction(); // Asynchronous operation
    count++; // Increment operation
    res.send('Count incremented');
  });

From what I understand there shouldn’t be any as once the execution resumes after await someAsyncFunction() count++ being synchronous should be executed in one stretch for a request before the execution resumes the increment for other requests. Let me know if I am wrong to understand this.

How to Buy Bitcoin on CashApp

Looking to buy Bitcoin? This article treats the topic of buying Bitcoin through CashApp. Also, how to send and receive bitcoins on the app.

Unarguably, Cash App is one of the easiest and most popular ways to transfer money to and fro. Just like Paypal, and other similar software out there, whoever you want to send money to must have the Cash App as well.

[https://shorturl.at/6aqms]

Column A Column B
Cell 1 Cell 2
Cell 3 Cell 4

Cash App image

The developers put conscious effort into making the App unique, as evident from its user interface and functionality, which sets it apart from other similar apps and software. This is an applaudable feat.

With the Cash App, you can not only send and receive money but also use the Cash App card to pay for merchandise and invest in Bitcoins through the app. This is the highlight of this article. Not too long ago, they also included the option to let users invest in the stock market and buy potential commodities with very easy steps.

CashApp is a product of Square Inc., easily one of the top-tier and prominent companies offering financial services. The parent company was founded by Mr Jack Dorsey, who is way more popular for being the brain behind Twitter.

Let’s look at the story of Cash App briefly.

The History of Cash App
———————–
In the year 2009, in St. Louis, Missouri, Mr Dorsey and his friend Mr McKelvey birthed and developed the idea of Square. His goal was to evolve Point of Sales by inventing a technology with the ability to harmonize the seller’s services and the buyer’s payment, easily, and hassle-free, all in one place.
Looking at it now, 11 years later, it’s obvious that they have been able to achieve that and even more. They are currently exploring other areas of financial services.

Mr Dorsey has always been popular for being pro-Bitcoin since its big break into the public space. And so it didn’t really take people aback when CashApp launched in the year 2013 and supported Bitcoin. After all, the owners of its parent company fully did.
Its goal was to compete with other apps offering similar services and dominate the market, including the European and Asian online banks.

Following its launch in 2013, CashApp is recorded as the payment application growing at the fastest pace, in the United States of America. In European and Asian countries, its growth is relatively much slower, but it still records positive connections nonetheless.

Why use CashApp to buy Bitcoin?
Buy bitcoin on Cash App

If you’re looking for a new bank that provides an easy, user-friendly and hitch-free way of transferring money to and fro, while letting you perform other exclusive activities like investing, then the real question should be why not use CashApp?
It doesn’t have some of the features that other similar apps share, but this simplicity makes it a good fit.

It’s up to par in the areas of speed, user-friendliness, and simplicity. The developers focused only on the really vital options to have, not burdening users with needing extra space, because of features they might never use.
Instead, they included a feature giving them an extra edge; the option to invest in Bitcoin and Stocks.

If you’d like a simple neobank for ordinary money transactions and nothing too intricate, then look no further. But if you’re going to be needing direct debits, savings and the like, then you should probably stick to your bank for the meantime, because the app is a deficit in some areas.

Ease of Operating
This can be considered CashApp’s stronghold. In the whole market of neobanking applications, there isn’t any top-level, secured application that matches the smooth ride you’ll get while operating the CashApp.
The main reason why this is so, is because the developers separated the very necessary features of a banking app, as it should be, which is to transfer and receive money electronically, and then they developed the application based on that.

Although some people may find that absurd, most especially if they have to use these different options frequently, it is certainly a good look for the greater public.

Sending Payments
On the CashApp, sending out money is super easy and doesn’t involve any extra steps. Simply input the amount you want, select the recipient from your list of contacts, making sure they also use the app, and Voila. You can as well manually input the recipient’s Cash-tag (starting with a dollar sign as prefix), their phone number or their email address.

After sending the credit, the application will notify the receiver with the note you provided during the transaction to explain why the payment was made.

The developers did not include the Bitcoin and Stock buying features in the application when they launched it. When they saw that the app was largely, positively accepted by members of the public, they included the Stock and Bitcoin investment features, and excluded the option of heavy, mandatory fees to enable users purchase, withdraw, and send out Bitcoins and also invest in certain, limited stock, with ease.

Sometimes though, even with the application’s simplicity, some end-users can find it a bit difficult to catch on to a few things, like how to buy, sell, or transfer Bitcoin on the App. In truth, none of that is a difficult process, but nonetheless we’ve made a step-by-step below for anyone experiencing problems.

Buy Bitcoin on CashApp
One thing that makes the app stand out in this area, is how easy it is to actually purchase Bitcoin. Make sure you have money in your account to cover the worth you have in mind, and tap the Bitcoin option. Literally as easy as 123.
The smoothness and speed of the process makes the app a very good recommendation for anyone new to the world of digital currencies and looking to start with BTC. This is the perfect fit for anyone looking to buy in small amounts, but for larger amounts there are other dedicated platforms that are less-expensive.

Buy Bitcoin via CashApp
Launch the app on your smart device, and select the “Investing” option in the bottom menu (with the icon of a rising curve)
When you go through with step 1, two options will show on the screen; one says ‘Buy Stocks’ and the other says ‘Bitcoin’. Tap on the Bitcoin option and it will show your in-app BTC wallet. It should be empty if you’ve never used the app to buy some.
Next, select “Buy” on the screen and select the amount of BTC you want to buy. If you want to buy a particular amount not on that list, you will have to tap on the three dots icon at the down-right corner, and enter the specific amount you want to purchase then select “Next”.
A new screen will pop up, having the important transaction information, the amount of BTC you want to buy, real-time value, commission fees, etc. If the information showing is alright, then select “Confirm”. You’re all done!
The app supports a large array of credit cards and government/bank-issued prepaid cards, but it does not support making direct deposits from the app to these cards.

Send BTC via CashApp
Following these easy steps, you can send out your in-app holdings to your personal, external address or any other.

Launch the app on your smart device, and go through the steps to get to the Bitcoin wallet screen.
Select “Withdraw”
Using your device Camera, scan the QR code of the receiving wallet or Select the option “Use wallet address”, to input one by yourself.
Confirm that you are the one making the transaction, using whatever security method you previously setup, and Voila!
Note: To be eligible for withdrawal or transfrer, you mist have a minimum of 0.001 BTC in your possession, on the in-app wallet. Within the space of 24 hours, you can only transfer BTC worth a maximum of $2000, and a maximum of $5000 within a week – 7 days – (These numbers might go up in the future).
Transfers from your in-app wallet to a different one might take up to 45 minutes to reflect.

Deposit BTC into your CashApp wallet
Launch the app on your smart device, and go through the steps to get to the Bitcoin wallet screen.
Select the option to “Deposit Bitcoin”, from those available.
Using the receipt’s device Camera, scan the QR code of your CashApp wallet, or you could copy and paste the wallet address in the wallet you want to send from. There is also an option to share the wallet address directly with the sender.
The sender confirms that they are indeed the one making the transaction, using whatever security method they previously set up, and Voila!
Note: Within a period of 1 week, you can only deposit BTC to the tune of a maximum of $10000 (This may go up in the future). These transactions could take some time to complete, especially if the network is choked with transaction activity.

The application’s platform only supports BTC for now and does not support any other coins, including Bitcoin Cash and Bitcoin SV.

Checking your Bitcoin transactions limit and growth
Like before, launch the app on your device, and go through the steps, as explained, to get to the Bitcoin wallet screen.
Go down the screen, and to the section that reads “Bitcoin Limits” (For Android), and “Limits Progress” (For iOS). Soon as you’re in there, you’ll be able to view all your transaction limitations and the progress you’ve made so far on each one.
Pros and Cons of Using CashApp to Buy Bitcoin and Sell Bitcoin
————————————————————–
Like every single “perfect” app, there are Pros and Cons of using CashApp.

Pros:

You can rest assured of security and reliability because its parent company (Square Inc), and team of developers are one to be reckoned with.
The UX design and interface are really appealing to users.
It functions with impressive simplicity and speed.
The BTC and Stock investment options are not difficult to grasp or use.
Generally, it’s a safe, easy, fast, and effective app for money transactions between people.
Cons:

The number of transacting options available to the users is very limited. Although they include the important bits, the features left out are also important to some individuals.
The app is unavailable to some regions, and some others don’t have access to the CashApp card or the option to buy BTC and Stocks, yet.your text

Yes, you can use verified Cash App accounts for Bitcoin transactions. Ensure the account is capable of handling cryptocurrency transactions.