As a miner, you have access to a pile of transactions that people want to resolve. Take enough of those transactions to fill up a block, based on some rules you want to follow (e.g. prioritize transactions that pay a transaction fee, which you claim; prioritize transactions that have been waiting longer). Add a transaction that gives you the current consensus mining fee out of "thin air"; that's the only place new coins get injected into the system. Include a hash of the previous block; that's what makes it a block chain. Then, via brute force computation, come up with some additional data appended to the transactions such that the double-sha256 hash of the data block (the sha256 of a sha256 hash of the block) is smaller than a certain upper bound (determined by the current consensus "difficulty"). Since you can assume the hash is evenly distributed across all possible values, to compute a hash smaller than a certain value requires brute-forcing enough hashes for one to land in that range. This is equivalent to "find a hash that starts with a certain number of 0 bits", but "less than a certain value" allows increasing the difficulty without doubling it.
Once you have a new block, tell other miners about it. Assuming you've followed the "consensus" rules for difficulty, mining fee, transaction fees, and similar, then the other miners will accept your block, and immediately start trying to mine a new block starting from yours rather than starting from the previous block. So, at that point, the consensus block chain includes your block, which means all the transactions you included took place.
The rest of the complexity comes in with questions like "how do you advertise a transaction you want to the miners", "how do miners communicate with each other", "how does the consensus change over time", and "how can existing clients handle new kinds of transactions that they don't natively understand".